【发布时间】:2018-10-19 14:30:00
【问题描述】:
我正在尝试构建一个示例 TCP 转发器。以下是功能简介:
- 转发器将侦听给定端口。
- 它包含客户端到服务器的映射
- 客户端将连接到转发器,转发器将查找地图并创建 2-way-forwarding-connection。
- 为此,它为每个客户端创建两个线程。
- 线程 1:从客户端读取并写入目标服务器
- 线程 2:从目标服务器读取并写入客户端。
所有这些都是用 C 编写的。 客户端和目标服务器可以用任何语言编写,现在是 Java。
当我第一次运行客户端时,它按预期工作。但是,如果我终止客户端并重新启动它,服务器将永远不会收到新连接。
这是我怀疑是错误的服务器代码。
Socket clientSocket = serverSocket.accept();
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
while (true) {
byte[] bArray = new byte[2048];
try {
System.out.println(String.format("SERVER:%s: Attempting to read", this.name));
inputStream.read(bArray);
System.out.println(String.format("SERVER:%s: Received %s", this.name, new String(bArray)));
byte[] bytes = (name + ":" + counter).getBytes();
counter++;
outputStream.write(bytes);
System.out.println(String.format("SERVER:%s: Sent %s", this.name, new String(bytes)));
} catch (IOException e) {
System.out.println(String.format("SERVER:%s: Client Disconnected ", this.name));
clientSocket = serverSocket.accept();
inputStream = clientSocket.getInputStream();
}
}
在C程序中,我检测到断开连接并关闭socket,如下图:
LOGINFO("Reading from Client Socket.");
iResult = read(readSocket, buff, recvbuflen);
if (iResult <= 0) {
LOGERROR("Receiving failed");
close(readSocket);
break;
}
【问题讨论】:
-
您的
serverSocket和readSocket是如何配置的?
标签: java c sockets server client