JAVA自学教程之TCP协议实例介绍



JAVA自学教程之TCP协议实例介绍。

TCP传输

Socket和ServerSocket

建立客户端和服务器端(两个独立的应用程序)

建立连接后,通过Socket中的IO流进行数据的传输

关闭Socket

TCP和UDP原理差不多,只是涉及的对象不一样

 

TCP客户端

 

Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。

 

 


 

  1. public static void TCPDemo() throws UnknownHostException, IOException {
  2.         /*
  3.          * TCP传输,客户端建立
  4.          * 1.建立TCP客户端socket服务,使用SOCKET对象(建议一创建就明确目的地,要连接的主机)
  5.          * 2.如果连接建立成功,就说明数据传输通道已建立
  6.          * 该通道就是SOCKET流,是底层建立好的,因为是流,所以有输入输出,其输入输出流对象,在SOCKET获取
  7.          * 通过getInputStream()和getOutputStream()来获取两个字节流
  8.          * 3.使用输出流,将数据写出(网络)
  9.          * 4.关闭
  10.          */
  11.         //建立客户端SOCKET服务
  12.         Socket socket = new Socket(“127.0.0.1″,6534);//地址和端口号
  13.         //获取SOCKET流中的输出流
  14.         OutputStream os = socket.getOutputStream();
  15.         //使用输出流将指定的数据写出
  16.             os.write(“tcp客户端发送信息”.getBytes());
  17.             socket.close();
  18.     }

TCP服务端

 

 

  1. public static void TEPserveDeno() throws IOException {
  2.         //服务端接收客户端发来的数据,并打印在控制台
  3.         /*
  4.          * 建立TCP服务端
  5.          * 1.建立TCP服务端Socket服务,通过ServerSocket对象
  6.          * 2.服务端必须对外提供端口,否则客户端无法连接
  7.          * 3.获取连接过来的客户端对象(重点)
  8.          * (比如拨打10086人工,一个客户,一个服务人员,客户的数据,客户自己最清楚)
  9.          * 4.通过客户端对象获取Socket流兑取客户端发来的数据并打印
  10.          * 5.关闭资源:关闭客户端,关闭服务端
  11.          */
  12.         //常见服务端对象
  13.         ServerSocket ss = new ServerSocket(6534);
  14.         //获取连接过来的客户端对象
  15.         Socket so = ss.accept();//此方法用来获取客户端对象
  16.         String ip = so.getInetAddress().getHostAddress();
  17.         //通过Socket对象获取输入流,读取客户端发来的数据
  18.         InputStream in = so.getInputStream();
  19.         byte[] buf = new byte[1024];
  20.         int len = in.read(buf);
  21.         String str = new String(buf,0,len);
  22.         System.out.println(“ip : ”+ip+”server : ”+str);
  23.         so.close();//服务端一般是不关闭的
  24.     }

 

注意:TCP和UDP不一样的是,必须先开启服务端,服务端不打开,客户端就无法访问,而UDP随意

 

服务端和客户端交互

客户端发送数据过去,服务端返回信息,表示收到


 

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.net.ServerSocket;
  5. import java.net.Socket;
  6. import java.net.UnknownHostException;
  7. public class Main {
  8.     public static void main(String[] args) throws IOException{
  9.         TCPDemo();
  10.         TCPserveDeno();
  11.     }
  12.     public static void TCPserveDeno() throws IOException {
  13.         ServerSocket ss = new ServerSocket(6534);
  14.         Socket so = ss.accept();//阻塞式的
  15.         String ip = so.getInetAddress().getHostAddress();
  16.         InputStream in = so.getInputStream();
  17.         byte[] buf = new byte[1024];
  18.         int len = in.read(buf);
  19.         String str = new String(buf,0,len);
  20.         System.out.println(“ip : ”+ip+”server : ”+str);
  21.         //使用客户端Socket对象输出流返回数据
  22.         OutputStream out = so.getOutputStream();
  23.         out.write(“收到信息”.getBytes());
  24.         so.close();
  25.     }
  26.     public static void TCPDemo() throws UnknownHostException, IOException {
  27.         Socket socket = new Socket(“127.0.0.1″,6534);
  28.         OutputStream os = socket.getOutputStream();
  29.         os.write(“tcp客户端发送信息”.getBytes());
  30.         //读取服务端返回的数据,使用Socket读取流
  31.         InputStream in = socket.getInputStream();
  32.         byte[] buf = new byte[1024];
  33.         int len = in.read(buf);
  34.         String text = new String(buf,0,len);
  35.         System.out.println(text);
  36.         socket.close();
  37.     }
  38. }