TCP实例 未完待续

时间:2022-11-20 00:25:32

我们知道TCP传输协议中的基本传输单元是socket,而TCP中的socket分为两种,一种是ServerSocket也就是服务端的套接字,而另一个就是socket这个是客户端的套接字。TCP不同于UDP,在UDP中我们可以说接收端和发送端,两者的顺序可以互换,而在tcp中一定是客户端请求访问服务端才能打开连接。

ok,废话少说,今天的主要目标是带着大家完成一个TCP的一个简单的例子:


没有服务端,就不可能接受客户端的数据,故设计的时候是先设计服务端:

package io.guaju.socket;

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

//此类是服务端
public class Server {
//定义一个监听的方法,这个方法其实就是服务器的逻辑,一直监听有没有客户端接入,并且传递数据
public void listen() throws IOException{
//①定义一个serversocket用来监听特定端口的信息
ServerSocket serverSocket = new ServerSocket(8989);
//②定义好服务端socket后,其实服务端就只需等待即可,这个时候服务端的accept方法就是等待的逻辑,这个逻辑是阻塞的
Socket accept = serverSocket.accept();
//③如果服务端接受到后会拿到一个socket,这个socket其实就是接受到客户端的socket
//现在我们来操作这个socket
String hostAddress = accept.getInetAddress().getHostAddress();//得到主机地址
int port = accept.getPort();//得到客户端的端口号
//④下方最重要的是得到数据,注意TCP中的传输核心上是通过流来传输的
InputStream inputStream = accept.getInputStream();//得到来自客户端的输入流
//读取流,并且打印
StringBuffer sb=new StringBuffer();
int temp=0;
byte[] buf=new byte[1024];
while ((temp=inputStream.read(buf))!=-1) {
sb.append(new String(buf,0,temp));
}
System.out.println("接受到的数据是"+sb);
OutputStream outputStream = accept.getOutputStream();//这个outputstream 就是客户端的输出流
//⑤我们可以操作这个输出流,来写入东西。
outputStream.write("欢迎你来我这玩".getBytes());
System.out.println("现在结束回话");

//释放资源
outputStream.close();
inputStream.close();
serverSocket.close();
}


}