java - Java 服务器未通过套接字接收 C++ 客户端
问题描述
我正在创建一个项目,其中C++ 客户端需要通过两个程序之间的 Socket 连接将字符串发送到Java Server 。当我运行服务器和客户端程序时,两者之间成功建立了连接。但是,当我尝试将用户输入从 C++ 程序发送到 Java 程序时,Java 服务器没有收到该消息。我对套接字编程比较陌生,所以我提前为任何愚蠢的错误道歉。
然而,令人惊讶的是,从服务器发送的消息似乎被客户端接收到了。
Java 服务器:
public class EchoServer {
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.err.println("Usage: java EchoServer <port number>");
System.exit(1);
}
System.out.println("Server started. Listening on Port 54000" );
int portNumber = Integer.parseInt(args[0]);
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new
PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream())); ){
System.out.println("Client connected on port " + portNumber
+". Servicing requests.");
out.write("CONNECTION ESTABLISHED");
out.flush();
String inputLine = "";
while(true){
System.out.println("Working");
inputLine = in.readLine();
if(inputLine == ""){
System.out.println("No Input");
}else{
System.out.println(inputLine);
}
}
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on
port "
+ portNumber + " or listening for a connection");
}
}
}
C++ 客户端:
int main() {
string ipAddress = "127.0.0.1";
int port = 54000;
// Initialize WinSock
WSAData data;
WORD ver = MAKEWORD(2, 2);
int wsResult = WSAStartup(ver, &data);
if (wsResult != 0)
{
cerr << "Can't start Winsock, Err #" << wsResult << endl;
return 0;
}
// Create socket
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
cerr << "Can't create socket, Err #" << WSAGetLastError() << endl;
WSACleanup();
return 0;
}
// Fill in a hint structure
sockaddr_in hint;
hint.sin_family = AF_INET;
hint.sin_port = htons(port);
inet_pton(AF_INET, ipAddress.c_str(), &hint.sin_addr);
// Connect to server
int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint));
if (connResult == SOCKET_ERROR)
{
cerr << "Can't connect to server, Err #" << WSAGetLastError() << endl;
closesocket(sock);
WSACleanup();
return 0;
}
// Do-while loop to send and receive data
char buf[4096];
string userInput;
do {
// Prompt the user for some text
cout << "> ";
cin >> userInput;
if (userInput.size() > 0) // Make sure the user has typed in something
{
// Send the text
int sendResult = send(sock, userInput.c_str(), userInput.size(), 0);
if (sendResult != SOCKET_ERROR)
{
// Wait for response
ZeroMemory(buf, 4096);
int bytesReceived = recv(sock, buf, 4096, 0);
if (bytesReceived > 0)
{
// Echo response to console
cout << "SERVER> " << string(buf, 0, bytesReceived) << endl;
}
}
}
} while (userInput.size() > 0);
closesocket(sock);
WSACleanup();
return 0;
}
解决方案
推荐阅读
- visual-studio - VSCode 中仍然存在错误的终端仿真器
- python - 如何将 JSON 文件中的值提取到数据框行中的单独列中
- java - 下载管理器视频无法播放
- r - 为什么写入文件时编码会发生变化?
- laravel - “npm run dev”上的错误(在 Laravel 全新安装之后)
- python - 如何通过其中一个键值将我的字典中的值居中?
- php - 在 WooCommerce 管理订单页面中更改订单项目显示的元键标签
- r - 如何使用 somSC 类型图进行多重绘图?
- python - 如何比较两个不同数据框中的列并保留第一个数据框中的值?
- python - 替换python字典中的数据框行元素字符串