java 假死_JAVA TCP通信基础篇——对发消息【如何解决输入流假死状态】

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议.

面向连接:服务器创建一个连接端口,客户端去连接服务器实现通信。

可靠的:tcp协议是是在连接成功之后才会发送数据,而基于UDP的协议是事先不会征求对方意见,直接将数据传送出去,因此TCP协议传输中,数据更可靠,更安全。

基于字节流:tcp协议中传递的信息是以流的形式传递的,在java中可通过inputstream来捕获,通过outputstream发送。

对于接收数据的时候出现假死的状态:

readLine()函数读取一行,结尾需要"\n"才能结束,不然会一直卡死在这里,因此大家在用printwriter的时候要print一个"\n",然后把printwriter flush掉。就不会假死了!

这样:pw.write("fuck you cient");    //send to server

pw.write("\n");

pw.flush();

在java中,tcp协议是已经封装好的类,可直接供用户使用。其中关键的两个类是

Socket类     ServerSocket类。

ServerSocket类用来创建服务器,具体用法请参照jdk文档。常用用法是

ServerSocket ss = new ServerSocket((int)port) //传入一个端口号,用户自定

Socket用于控制两端的连接,服务器的Socket可以和客户端的S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一份基于 Java 实现 TCP 网络通信的教程。以下是实现 TCP 通信的基本步骤: 1. 创建服务端套接字并监听端口: ```java ServerSocket serverSocket = new ServerSocket(portNumber); Socket clientSocket = serverSocket.accept(); ``` 2. 创建客户端套接字并连接到服务器: ```java Socket socket = new Socket(serverName, portNumber); ``` 3. 使用输入输出进行数据传输: ```java // 从输入中读取数据 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String inputLine = in.readLine(); // 向输出中写入数据 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println(outputLine); ``` 4. 关闭套接字和: ```java in.close(); out.close(); socket.close(); ``` 下面是一个简单的示例,演示如何使用 Java 实现 TCP 通信: 服务端代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String[] args) throws IOException { int portNumber = 1234; ServerSocket serverSocket = new ServerSocket(portNumber); Socket clientSocket = serverSocket.accept(); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); String inputLine, outputLine; outputLine = "Hello, client!"; out.println(outputLine); while ((inputLine = in.readLine()) != null) { out.println(inputLine); if (inputLine.equals("Bye.")) break; } in.close(); out.close(); clientSocket.close(); serverSocket.close(); } } ``` 客户端代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TCPClient { public static void main(String[] args) throws IOException { String serverName = "localhost"; int portNumber = 1234; Socket socket = new Socket(serverName, portNumber); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); String inputLine, outputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Server: " + inputLine); outputLine = "Hello, server!"; out.println(outputLine); if (inputLine.equals("Bye.")) break; } out.close(); in.close(); socket.close(); } } ``` 这个例子中,服务端向客户端发送字符串“Hello, client!”,接着客户端会向服务端发送字符串“Hello, server!”,并不断地将服务端返回的字符串输出到控制台上。当客户端发送“Bye.”字符串时,程序结束。 希望这个简单的教程能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值