gpt4 book ai didi

java - C Socket - 无法重新连接服务器

转载 作者:行者123 更新时间:2023-11-30 19:42:01 24 4
gpt4 key购买 nike

我用c语言创建了一个服务器程序,当我第一次尝试连接服务器时,它运行良好,但我断开客户端并第二次连接,没有任何反应。请找到我的源代码。

服务器代码:

主要方法

int main(int argc, char** argv) {
printf(">>>>Server Started!<<<<\n");
while(server() == -1) {
printf(">>>>>>Restarting the Server....<<<<<<.\n");
}
printf(">>>>Server Stopped!<<<<\n");
return (EXIT_SUCCESS);
}

服务器代码

#define INTERVAL 3
#define PORT 7777
#define MAX_OUTSTATLEN 1000000
#define MAX_STATLEN 100000
#define MAX_CLIMSGLEN 2000

int server() {
#ifdef _WIN32
SOCKET agent_socket, client_socket;
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) {
printf("Initializing WinSock Failed.\n");
return 1;
}
#else
int agent_socket, client_socket;
#endif
struct sockaddr_in agent, client;
char *outStat, client_message[MAX_CLIMSGLEN], timestamp[0];
int client_socket_len, isReconnet = 1, x = 0;
if ( (agent_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
printf("Agent creation failed.\n");
return -1;
} else {
printf("Agent creation successful.\n");
}
memset(&agent, 0, sizeof agent);
memset(&client, 0, sizeof client);
agent.sin_family = AF_INET;
agent.sin_port = htons(PORT);
agent.sin_addr.s_addr = INADDR_ANY;
if(setsockopt(agent_socket, SOL_SOCKET, SO_REUSEADDR, &isReconnet, sizeof(int)) == -1) {
printf("Unable to set Socket Option.\n");
}
if ( bind(agent_socket, (struct sockaddr*)&agent, sizeof(agent)) != 0 ) {
printf("Agent bind failed.\n");
return -1;
} else {
printf("Agent bind successful.\n");
}
if ( listen(agent_socket, 20) != 0 ) {
printf("Can't listen on the Port.\n");
return -1;
} else {
printf("Waiting for client...\n");
}
client_socket_len = sizeof (struct sockaddr_in);
#ifdef _WIN32
client_socket = accept(agent_socket, (struct sockaddr *) &client, &client_socket_len);
#else
client_socket = accept(agent_socket, (struct sockaddr *) &client, (socklen_t*) & client_socket_len);
#endif
if (client_socket < 0) {
printf("can't accept the Client.\n");
return -1;
} else {
printf("Agent connected to client.\n");
}
if (recv(client_socket, client_message, MAX_CLIMSGLEN, 0) > 0) {
send(client_socket, client_message, strlen(client_message), 0);
while (1) {
outStat = malloc(MAX_OUTSTATLEN * sizeof (char));
*outStat = '\0';
strcat(outStat, "Some String to Client");
printf("%s\n", outStat);
if (recv(client_socket, client_message, MAX_CLIMSGLEN, 0) > 0) {
send(client_socket, outStat, strlen(outStat), 0);
} else {
printf("Unable to reach the client.\n");
close(client_socket);
close(agent_socket);
return -1;
}
#ifdef _WIN32
Sleep(INTERVAL * 1000);
#else
sleep(INTERVAL);
#endif
}
} else {
printf("Message receive failed.\n");
close(client_socket);
close(agent_socket);
return -1;
}
return 0;
}

客户端代码:(Java)

public class Test {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket echoSocket = new Socket("10.8.157.7", 7777);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
out.println("Send Messages");
while(true){
out.println("OK");
System.out.println(in.readLine());

}
}
}

最佳答案

您需要将此代码包装在 for 循环或 while 循环中,以便服务器多次接受连接。

关于java - C Socket - 无法重新连接服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com