JavaTCP协议 客户端和服务端

TCP传输

Socket和ServerSocket

建立客户端和服务器端

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

关闭socket

同样,客户端与服务端是两个独立的应用程序。

 

类 Socket

此类实现客户端套接字(也可以就叫套接字)。套接字是两台机器间通信的端点。

 

构造方法

 

Socket()
通过系统默认类型的 SocketImpl 创建未连接套接字

 

Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

 

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

 

 

常用方法

void

connect(SocketAddress endpoint)
将此套接字连接到服务器。(SocketAddress为封装(IP 地址(主机名) + 端口号)的类

InputStream

getInputStream()
返回此套接字的输入流。

OutputStream

getOutputStream()
返回此套接字的输出流。

void

shutdownInput()
此套接字的输入流置于流的末尾

void

shutdownOutput()
禁用此套接字的输出流。用于告诉服务端数据发送完毕

 

 

客户端发送数据到服务端 

TCPClentDemo.java

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

public class TCPClentDemo {
   public static void main(String[] args) throws IOException, IOException {
      System.out.println("客户端开启。。。。");
      /**
      *TCP传输,客户端建立过程。
      *1,创建tcp客户端socket服务,使用的是socket对象
      *        建议该对象一创建就明确目的地(明确要连接的主机)。
      *2,如果连接建立成功,说明数据传输通道已建立。
      *     该通道是socket流,是底层建立好的,
      *     既然是流,说明这里既有输出,又有输入。
      *     想要输入或输出对象,可以找socket来获取
      *    可以通过getOutputStream()和getInputStream来获取两个字节流
      *3,使用输出流,将数据输出
      *4,关闭资源
      */
      Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(),5432);
      OutputStream out = socket.getOutputStream();
      out.write("TCP,哥们又来了".getBytes());
      socket.close();
   }
}


 

ServerSocket

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

 

构造方法

 

ServerSocket(int port)
创建绑定到特定端口的服务器套接字。

 

ServerSocket()
创建非绑定服务器套接字。

 

常用方法

Socket

accept()
侦听并接受到此套接字的连接。

void

close()
关闭此套接字。

InputStream

getInputStream()
返回此套接字的输入流。

OutputStream

getOutputStream()
返回此套接字的输出流。

 

服务端接受客户端发送过来的数据,并打印在控制台上

TCPServerDemo.java

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

public class TCPServerDemo {
   public static void main(String[] args) throws IOException {
      /**
      *TCP传输,客户端建立过程。
      *1,创建tcp客户端socket服务,使用的是socket对象
      *        建议该对象一创建就明确目的地(明确要连接的主机)。
      *2,如果连接建立成功,说明数据传输通道已建立。
      *     该通道是socket流,是底层建立好的,
      *     既然是流,说明这里既有输出,又有输入。
      *     想要输入或输出对象,可以找socket来获取
      *    可以通过getOutputStream()和getInputStream来获取两个字节流
      *3,使用输出流,将数据输出
      *4,关闭资源
      */
      System.out.println("服务端开启。。。。");
      // 1,创建服务端对象
      ServerSocket ss = new ServerSocket(5432);
      // 2,获取链接过来的客户端对象
      Socket socket = ss.accept();
      // 3,通过socket对象获取输入流,要读取客户端发来的数据
      InputStream in = socket.getInputStream();
      byte buf[] = new byte[1024];
      int ch = 0;
      while ((ch = in.read(buf)) != -1) {
        System.out.println(new String(buf, 0, ch));
      }
      socket.close();
      ss.close();// 一般不需要关闭,可能客户端多次访问
   }
}