socket编程

Posted 超冷的态度

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket编程相关的知识,希望对你有一定的参考价值。

1.概念:

  1.网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑

  2.网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,

  在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!

  中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!

 

2.网络编程三要素:

  1:IP地址  

  2:端口  

  3:协议

 

3.IP地址 = 网络地址 +主机地址

  网络地址:标识计算机或网络设备所在的网段

  主机地址:标识特定主机或网络设备

  查看本机的IP地址      ipconfig

   测试网络是否通畅     ping + IP地址

4.网络通信协议

  为在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合

    1.TCP协议(Transmission Control Protocol 传输控制协议)

    面向连接的、可靠的、基于字节流的传输通信协议

    2.UDP协议(User Datagram Protocol 用户数据报协议)

    无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接

  UDP协议的Socket网络编程步骤:

    1.利用 DatagramPacket 对象封装数据报

    2.利用 DatagramSocket 发送数据报

    3利用 DatagramSocket 接收数据报

    4利用 DatagramPacket 处理数据报

 

基于UDP协议的Socket网络通信

 

 

技术分享图片
DatagramSocket ds=new DatagramSocket(1086);

   byte[] bys = new byte[1024];
   int len = bys.length;
   DatagramPacket dp = new DatagramPacket(bys, len);

   ds.receive(dp);

   byte[] by = dp.getData();
   int length = dp.getLength();

   InetAddress address = dp.getAddress();
   String ip = address.getHostAddress();

   String s = new String(by, 0, length);
   System.out.println(ip + "---" + s);

 

  ds.close();
技术分享图片

 

 

技术分享图片
DatagramSocket ds=new DatagramSocket();
 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 
 byte [] bys="aaa".getBytes();
 int num=bys.length;

 InetAddress address=InetAddress.getByName("192.168.60.7");

 int port=1086;
 DatagramPacket dp=new DatagramPacket(bys,num, address,port);

 ds.send(dp);  
 ds.close();
技术分享图片

 

 

基于TCP协议的Socket网络通信

 

 

技术分享图片

 

 

技术分享图片
Socket sk=new Socket("192.168.60.7",20004);
  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
  String line=null;
  while((line=br.readLine())!=null){   
   bw.write(line);
   bw.newLine();
   bw.flush();
   
   InputStream is=sk.getInputStream();   
   byte [] by=new byte[1024];
   int num=is.read(by);
   String h=new String(by, 0, num);
   System.out.println("Service:\t"+h);
  }     
   //br.close();
   //bw.close();
   sk.close();
技术分享图片

 

 

 

技术分享图片
ServerSocket sk=new ServerSocket(20004);
   Socket s=sk.accept();
   BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
   BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
   OutputStream os=s.getOutputStream();
   String line=null;
   while((line=br.readLine())!=null){
    System.out.println("Client \t"+line);  
    
    os.write(bw.readLine().getBytes());
   }  
技术分享图片

以上是关于socket编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?

以编程方式将按钮添加到片段