• socket编程入门


    1TCP协议

    [java] view plain copy
    1. import java.io.InputStream;  
    2. import java.io.OutputStream;  
    3. import java.net.Socket;  
    4.   
    5. /* 
    6.  * 1.Tcp协议客户端 
    7.     创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器 
    8.     调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流 
    9.     输入流可以读取服务端输出流写出的数据 
    10.     输出流可以写出数据到服务端的输入流 
    11.  */  
    12. public class Client {  
    13.     public static void main(String[] args) throws Exception{  
    14.         //创建socket连接服务器  
    15.         Socket socket = new Socket("127.0.0.1"12345);  
    16.         //获取客户端输入流  
    17.         InputStream in = socket.getInputStream();  
    18.         //获取客户端输出流  
    19.         OutputStream out = socket.getOutputStream();  
    20.         //读取服务器发过来的数据  
    21.         byte[] arr = new byte[1024];  
    22.         int len = in.read(arr);  
    23.         //将数据转换成字符串  
    24.         System.out.println(new String(arr,0,len));  
    25.         //客户端向服务端写数据  
    26.         out.write("服务器你好,我是客户端".getBytes());  
    27.         socket.close();  
    28.     }  
    29. }  
    [java] view plain copy
    1. import java.net.DatagramPacket;  
    2. import java.net.DatagramSocket;  
    3.   
    4. /* 
    5.  * UDP协议接收端 
    6.  * 接收Receive 
    7.     创建DatagramSocket, 指定端口号 
    8.     创建DatagramPacket, 指定数组, 长度 
    9.     使用DatagramSocket接收DatagramPacket 
    10.     关闭DatagramSocket 
    11.     从DatagramPacket中获取数据 
    12.  */  
    13. public class Receive {  
    14.     public static void main(String[] args) throws Exception {  
    15.         // 创建码头  
    16.         DatagramSocket socket = new DatagramSocket(6666);  
    17.         // 创建接收数据集装箱  
    18.         DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);  
    19.         //接收数据放到集装箱  
    20.         socket.receive(packet);  
    21.         //接收数据  
    22.         byte[] arr = packet.getData();  
    23.         int len = packet.getLength();  
    24.         System.out.println(new String(arr,0,len));  
    25.         //关闭socket  
    26.         socket.close();   
    27.     }  
    28. }  

    2UDP协议

    [java] view plain copy
    1. import java.net.DatagramPacket;  
    2. import java.net.DatagramSocket;  
    3. import java.net.InetAddress;  
    4.   
    5. /* 
    6.  * UDP协议发送端 
    7.  * 发送Send 
    8.         创建DatagramSocket, 随机端口号 
    9.         创建DatagramPacket, 指定数据, 长度, 地址, 端口 
    10.         使用DatagramSocket发送DatagramPacket 
    11.         关闭DatagramSocket 
    12.  */  
    13. public class Send {  
    14.     public static void main(String[] args) throws Exception {  
    15.         String message ="what your name?";  
    16.         //创建码头  
    17.         DatagramSocket socket = new DatagramSocket();  
    18.         //创建集装箱  
    19.         DatagramPacket packet =   
    20.                 new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);  
    21.         socket.send(packet);  
    22.         socket.close();  
    23.     }  
    24. }  

    [java] view plain copy
    1. /* 
    2.  * TCP协议服务端 
    3.     创建ServerSocket(需要指定端口号) 
    4.     调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket 
    5.     调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流 
    6.     输入流可以读取客户端输出流写出的数据 
    7.     输出流可以写出数据到客户端的输入流 
    8.  */  
    9. public class Server {  
    10.     public static void main(String[] args) throws Exception {  
    11.         ServerSocket server = new ServerSocket(12345);  
    12.         // 接收客户端的请求  
    13.         Socket socket = server.accept();  
    14.         // 获取服务器输入流  
    15.         InputStream in = socket.getInputStream();  
    16.         // 获取服务器输出流  
    17.         OutputStream out = socket.getOutputStream();  
    18.         // 服务器向客户端写出数据  
    19.         out.write("百度一下,你就知道".getBytes());  
    20.         // 读取客户端发过来的数据  
    21.         byte[] arr = new byte[1024];  
    22.         int len = in.read(arr);  
    23.         // 将数据转换成字符串  
    24.         System.out.println(new String(arr, 0, len));  
    25.         socket.close();  
    26.     }  
    27. }  

    3总结

      1 Socket套接字概述:

          网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

          通信的两端都有Socket。相当于一个港口,用于发送和接收数据的

          网络通信其实就是Socket间的通信。

          数据在两个Socket间通过IO流传输。

          Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

      2服务器与客户端的概念

          第一次主动方就是客户端,被动方就是服务器,这些名词,只是一种喻意辞也有可能你们实际上都是客户端

       3两种协议的实际案例

          网络直播就是采用的UDP协议, 信号不好 视频卡了,但是还是一直发送数据,信号恢复了,就直接是信号恢复后的数据了,信号不好那个时间段的数据已经消失了

          游戏一般不采取tcp协议的,因为他没有必须保证数据的完整服务器收到了,就让你移动,服务器没受到,就不让你移动


  • 相关阅读:
    Oracle Yum源
    Linux Centos7使用ping命令ping不通网络的解决方案
    Oracle 11G DBMS包和类型参考
    (转载)linux下Yum的$releasever和$basearch的取值
    IDEA 配置Tomcat乱码解决方法
    C# .NET Framework 3.5 下 Thread 与 Semaphore 的简单例子
    C# .NET Framework 3.5 下 Task 与 EventWaitHandle 的简单例子
    Notepad ++ 去//注释的方法
    Clip Studio Paint(优动漫)如何提取线稿?
    C# .NET Framework 3.5 下 Task 与 Semaphore 的简单例子
  • 原文地址:https://www.cnblogs.com/edgedance/p/6979656.html
Copyright © 2020-2023  润新知