首页 > 编程语言 >网络编程

网络编程

时间:2024-07-30 22:39:19浏览次数:12  
标签:java socket 编程 网络 new import net public

网络编程

1.1 ip

package com.jf.lesson01;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestInetAdress {
   public static void main(String[] args) {
       try {
           InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
           System.out.println(inetAddress1);
           InetAddress inetAddress2 = InetAddress.getByName("localhost");
           System.out.println(inetAddress2);
           InetAddress inetAddress3 = InetAddress.getLocalHost();
           System.out.println(inetAddress3);
           //查询网站ip地址
           InetAddress inetAddress4 = InetAddress.getByName("www.baidu.com");
           System.out.println(inetAddress4);

           System.out.println(inetAddress4.getCanonicalHostName());
      } catch (UnknownHostException e) {
           throw new RuntimeException(e);
      }
  }
}

1.2 端口

端口表示计算机上的一个程序的进程

不同的进程有不同的端口号

被规定0~65535

单个协议下端口号不能冲突

端口分类

公共端口0~1023

HTTP:80

HTTPS:443

ssh:22

FTP:21

Telnet:23

程序注册端口:1024~49151,分配用户或者程序

Tomcat:8080

Mysql:3306

Oracle:1521

动态,私有:49152~65535

netstat -ano #查看所有的端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|findstr ""   # 查看指定端口的进程

 

package com.jf.lesson01;

import java.net.InetSocketAddress;

public class TestInetSockAdress {
   public static void main(String[] args) {
       InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
       System.out.println(inetSocketAddress);

  }
}

1.3通信协议

1.4 tcp/ip协议

客户端

1.连接服务器Socket

2.发送消息

package com.jf.lesson01.lesson02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class TcpClientDemo01 {
   public static void main(String[] args) {
       Socket socket =null;
       OutputStream os =null;
       //1.要知道服务器的地址
       try {
           InetAddress ServerIp = InetAddress.getByName("127.0.0.1");
           //2.端口号
           int port =9999;
           //3.创建一个socket连接
           socket = new Socket(ServerIp,port);
           //4.发送消息IO流
            os = socket.getOutputStream();
           os.write("你好,收到消息".getBytes());
      } catch (Exception e) {
           throw new RuntimeException(e);
      }finally {
           if(os!=null){
               try {
                   os.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(socket!=null){
               try {
                   socket.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
      }
  }
}

服务器

1.建立服务的端口ServerSocket

2.等到用户的连接accept();

3.接收用户的消息

package com.jf.lesson01.lesson02;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class TcpServerDemo01 {
   public static void main(String[] args) {
       ServerSocket serverSocket =null;
       Socket socket =null;
       InputStream is =null;
       ByteArrayOutputStream baos  =null;
       try {
           //1.设置服务器的地址
            serverSocket = new ServerSocket(9999);
           //2.等待客户端连接
            socket = serverSocket.accept();
           //3.读取客户端的消息
            is = socket.getInputStream();
           //管道流
            baos = new ByteArrayOutputStream();
           byte[] buffer = new byte[1024];
           int len;
           while ((len=is.read(buffer))!=-1){
                   baos.write(buffer,0,len);
          }
           System.out.println(baos.toString());


      } catch (IOException e) {
           e.printStackTrace();
      }finally {
           //关闭资源
           if(baos!=null){
               try {
                   baos.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(is!=null){
               try {
                   is.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(socket!=null){
               try {
                   socket.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if(serverSocket!=null){
               try {
                   serverSocket.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
      }
  }
}

文件上传

package com.jf.lesson01.lesson02;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo02 {
   public static void main(String[] args) throws Exception {
       //1.创建服务
       ServerSocket serverSocket = new ServerSocket(9000);
       //2.监听客户端的连接
       Socket socket = serverSocket.accept();//阻塞式连接,会一直等待客户端连接
       //3.获取输入流
       InputStream is = socket.getInputStream();
       //4.文件输出
       FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
       byte[] buffer = new byte[1024];
       int len;
       while ((len=is.read(buffer))!=-1){
           fos.write(buffer,0,len);
      }
       //通知客户端我接收完毕了
       OutputStream os = socket.getOutputStream();
       os.write("我接受完毕了".getBytes());
       //关闭资源
       fos.close();
       is.close();
       socket.close();
       serverSocket.close();
  }
}
package com.jf.lesson01.lesson02;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClientDemo02 {
   public static void main(String[] args) throws Exception {
       //1.创建一个socket连接
       Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
       //2.创建一个输出流
       OutputStream os = socket.getOutputStream();
       //3.读取文件流
       FileInputStream fis = new FileInputStream(new File("02.jpg"));
       //4.写出文件
       byte[] buffer = new byte[1024];
       int len;
       while ((len=fis.read(buffer))!=-1){
           os.write(buffer,0,len);
      }
       //通知服务器,已经传输完了
       socket.shutdownOutput();
       //确定服务器接收完毕,才能断开连接
       InputStream inputStream = socket.getInputStream();
       //String byte[]
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       byte[] buffer2 = new byte[2014];
       int len2;
       while ((len2=inputStream.read(buffer2))!=-1){
           baos.write(buffer2,0,len2);
      }
       System.out.println(baos.toString());
       //5.关闭资源
       baos.close();
       inputStream.close();
       fis.close();
       os.close();
       socket.close();
  }
}

 

1.5 udp

发短信,不需要连接,需要知道对方的地址

发送端

package com.jf.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

//不需要连接服务器
public class UdpClientDemo01 {
   public static void main(String[] args) throws Exception {
       //1.建立一个Socket
       DatagramSocket socket = new DatagramSocket();
       //2.建立包
       //发送给谁
       InetAddress localhost = InetAddress.getByName("localhost");
       int port =9090;
       String msg="你好啊";
       //数据,数据的长度起始,要发送给谁
       DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
       //3.发送包
       socket.send(packet);
       //4.关闭流
       socket.close();
  }
}

接收端

package com.jf.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpServerDemo01 {
   public static void main(String[] args) throws Exception {
       //开放端口
       DatagramSocket socket = new DatagramSocket(9090);
       //接收数据包
       byte[] buffer = new byte[1024];
       DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
       socket.receive(packet);//阻塞接收
       System.out.println(packet.getAddress().getHostAddress());
       System.out.println(new String(packet.getData(),0,packet.getLength()));
       //关闭连接
       socket.close();
  }
}

循环发送消息

package com.jf.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class UdpSenderDemo01 {
   public static void main(String[] args) throws Exception {
       DatagramSocket socket = new DatagramSocket(8888);
       //准备数据 system.in
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       while (true){
           String data = reader.readLine();
           byte[] datas = data.getBytes();
           DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
           socket.send(packet);
           if(data.equals("bye")){
               break;
          }
      }

       socket.close();
  }
}

循环接收消息

package com.jf.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpReceiveDemo01 {
   public static void main(String[] args) throws Exception {
       DatagramSocket socket = new DatagramSocket(6666);

       while (true){
           //准备接收的包裹
           byte[] container = new byte[1024];
           DatagramPacket packet = new DatagramPacket(container,0,container.length);
           socket.receive(packet);//阻塞式接收包裹
           //断开连接,bye
           byte[] data = packet.getData();
           String receivedata = new String(data, 0, packet.getLength());
           System.out.println(receivedata);
           if(receivedata.equals("bye")){
               break;
          }

      }
           socket.close();
  }
}

咨询

package com.jf.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable {
   DatagramSocket socket =null;
   BufferedReader reader =null;
   private int fromPort;
   private String toIP;
   private int toPort;

   public TalkSend(int fromPort, String toIP, int toPort) {
       this.fromPort = fromPort;
       this.toIP = toIP;
       this.toPort = toPort;
       try {
            socket = new DatagramSocket(fromPort);
           reader = new BufferedReader(new InputStreamReader(System.in));
      } catch (SocketException e) {
           e.printStackTrace();
      }
  }

   @Override
   public void run() {
       while (true){
           try{
               String data = reader.readLine();
               byte[] datas = data.getBytes();
               DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
               socket.send(packet);
               if(data.equals("bye")){
                   break;
              }
          }catch (Exception e){
               e.printStackTrace();
          }
      }
       socket.close();
  }
}
package com.jf.chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable{
   DatagramSocket socket =null;
   private int port;
   private String msgFrom;

   public TalkReceive(int port,String msgFrom) {
       this.port = port;
       this.msgFrom = msgFrom;
       try {
           socket = new DatagramSocket(port);
      } catch (SocketException e) {
           e.printStackTrace();
      }
  }

   @Override
   public void run() {
       while (true){
           try {
               //准备接收的包裹
               byte[] container = new byte[1024];
               DatagramPacket packet = new DatagramPacket(container,0,container.length);
               socket.receive(packet);//阻塞式接收包裹
               //断开连接,bye
               byte[] data = packet.getData();
               String receivedata = new String(data, 0, packet.getLength());
               System.out.println(msgFrom+":"+receivedata);
               if(receivedata.equals("bye")){
                   break;
              }
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
       socket.close();
  }
}
package com.jf.chat;

public class TalkStudent {
   public static void main(String[] args) {
       //开启两个线程
       new Thread(new TalkSend(7777,"localhost",9999)).start();
       new Thread(new TalkReceive(8888,"老师")).start();
  }
}
package com.jf.chat;

public class TalkTeacher {
   public static void main(String[] args) {
       //开启两个线程
       new Thread(new TalkSend(5555,"localhost",8888)).start();
       new Thread(new TalkReceive(9999,"学生")).start();
  }
}

1.6 URL

统一资源定位符:定位资源的,定位互联网上的某一资源

URL下载资源

package com.jf.lesson04;

import javax.net.ssl.HttpsURLConnection;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class URLDown {
   public static void main(String[] args) throws IOException {
       //1.下载地址
       URL url = new URL("http://localhost:8080/jf/01.txt");
       //2.连接这个地址
       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
       InputStream inputStream = urlConnection.getInputStream();
       FileOutputStream fos = new FileOutputStream("01.txt");
       byte[] buffer = new byte[1024];
       int len;
       while ((len=inputStream.read(buffer))!=-1){
           fos.write(buffer,0,len);
      }
       fos.close();
       inputStream.close();
       urlConnection.disconnect();//断开连接
  }
}

url

package com.jf.lesson04;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

import java.net.MalformedURLException;
import java.net.URL;

public class URLDemo01 {
   public static void main(String[] args) throws MalformedURLException {
       URL url = new URL("Http://localhost:8080/hello/index.jsp?username=jf&password=123");
       System.out.println(url.getProtocol());//协议
       System.out.println(url.getHost());//主机
       System.out.println(url.getPort());//端口
       System.out.println(url.getPath());//文件
       System.out.println(url.getFile());//全路径
       System.out.println(url.getQuery());//参数
  }
}

标签:java,socket,编程,网络,new,import,net,public
From: https://www.cnblogs.com/huangjiangfei/p/18333493

相关文章

  • 东莞理工学院“未来通信网络研究中心” 院士团队人才引进招聘公告
    一、中心简介未来通信网络研究中心由全职中国工程院院士领衔,主要研究方向包括6G网络、智能网联车、空天地一体化网络、网络智能等。团队正承担重大研究项目,研究平台先进,科研经费充足。二、招聘岗位未来通信网络研究中心根据研究需要,招聘以下各类人才:1、高层次人才岗位杰出......
  • 长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现
    ##LSTM预测模型背景长短期记忆网络(LongShort-TermMemory,LSTM)是一种特殊的递归神经网络(RNN),于1997年首次由SeppHochreiter和JürgenSchmidhuber提出。LSTM主要用于处理和预测序列数据中的时间依赖关系,能够有效地解决传统RNN在处理长序列时遇到的梯度消失和梯度爆炸问题。因......
  • 2024年华为OD机试真题-结队编程 -(C++/Java/python)-OD统一考试(C卷D卷)
     2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】题目描述某部门计划通过结队编程来进行项目开发,已知该部门有N名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程,结队分组规则如下:从部门中选出序号分别为i、j、k的3名员工,他们的职级分贝为......
  • 网络安全靶场系列(臃肿版):PbootCMS(V3.2.5)遇到的坑(您的服务器环境不支持gd扩展,将无法使
    PbootCMS(V3.2.5)遇到的坑(您的服务器环境不支持gd扩展,将无法使用验证码!)前言dockerphpgd扩展,docker安装php扩展gd库一、安装nginx、php、mysql镜像二、运行、停止、删除容器三、安装php扩展gd库四、扩展知识1、docker-php-source2、docker-php-ext-enable......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(3)1008比特跳跃
    题目大意:给出n个城市m条联通两个城市的无向边,从\(u_i\)到\(v_i\)需要耗费\(t_i\)的时间,你也可以选择进行一次比特跳跃,耗费k*(u|v)的时间思路:不难发现,比特跳跃最多跳跃一次。证明:假设使用两次比特跳跃,a->b,c->d,那么权值为k(a|b+c|d),不如直接从a->d,权值为k(a|d),因为a|b+c|d>......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(3) 1005 数论
    题意:分析:远看数论题,实则是道数据结构。记\(f_{i}\)表示\(r_{k}=i\)的方案数,\(g_{i}\)表示\(l_{1}=i\)的方案数,那么运用简单容斥,可得:\[ans_{x}=(\sum_{i=1}^{n}f_{i})-((\sum_{i=1}^{x-1}f_{i})+1)\times((\sum_{i=x+1}^{n}g_{i})+1)+1\]先考虑如何计算\(f_{i......
  • 【第二节】python编程基础语法
    目录一、运算符介绍1.1算术运算符1.2比较运算符1.3赋值运算符1.4位运算符1.5逻辑运算符1.6成员运算符1.7身份运算符二、python运算符优先级三、三大流程结构四、列表五、元组六、字典一、运算符介绍1.1算术运算符1.2比较运算符1.3赋值运算符......
  • 物联卡如何突破网络传输上限
    物联卡如何突破网络传输上限物联卡的网络传输上限通常由网络运营商设定,为了突破网络传输上限,可以考虑以下几个方面:选择适合的网络运营商:不同的运营商提供的物联网套餐和服务可能不同,可以选择提供更高传输上限的运营商。使用4G/5G网络:与2G/3G网络相比,4G/5G网络速度......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(1)1012并
    题目大意:给出n个矩形,求被k个矩形覆盖的面积的并集的期望,输出k为1-n的所一答案思路:由于是求期望所以是求出所有情况的和再除以可能的情况,每一种情况中的面积都由--同时被1个矩形覆盖,同时被两个矩形覆盖······同时被k个矩形覆盖组成,而且不难得出当k一定时,取被m个矩形覆盖的......
  • 单元电路(串联阻抗、并联导纳、无耗传输线)的基本网络参量(Z矩阵、Y矩阵、A矩阵、S矩
          PDF文件下载链接如下:单元电路(串联阻抗、并联导纳、无耗传输线段、无耗传输线接头)的矩阵(Z矩阵、Y矩阵、S矩阵、A矩阵、T矩阵)推导过程资源-CSDN文库https://download.csdn.net/download/lu2289504634/89583021单元电路的网络参量,可以直接根据未归一化网络参量的......