我有一个服务器(在 C 中)获取客户端发送的消息,然后服务器应该发送一个答案。客户端通过端口(例如 1345)发送消息,应该通过不同的端口(例如 2345)获得答案。
收到客户端的消息,但不知道为什么2345端口无法得到回复
服务器的代码是:
void *CreateTCPSocket(void *p) {
int srcPort = 1345;
int dstPort = 2345;
struct sockaddr_in sockaddr_from;
struct sockaddr_in sockaddr_to;
int sockaddr_from_len = sizeof(sockaddr_from);
int sockaddr_to_len = sizeof(sockaddr_to);
uint8_t recv_message[MSS];
bool msg_received = false;
// Create TCP socket
int fd_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (fd_sock == -1){
exit(1);
}
// Configure src port
sockaddr_from.sin_family = AF_INET;
sockaddr_from.sin_port = htons(srcPort);
sockaddr_from.sin_addr = ip_src;
sockaddr_to.sin_family = AF_INET;
sockaddr_to.sin_port = htons(destPort);
sockaddr_to.sin_addr = ip_dst;
if((ret_bind = bind(fd_sock, (struct sockaddr*)&sockaddr_from, sizeof(sockaddr_from))) < 0){
perror("ERROR bind");
exit(1);
}
while(1){
if (listen(fd_sock, 100) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
new_socket = accept(fd_sock, (struct sockaddr*)&sockaddr_from,(socklen_t*)&sockaddr_from_len)
if (new_socket > 0){
int res_sock = recvfrom(new_socket, recv_message, MSS, 0, (struct sockaddr *)&sockaddr_from, (socklen_t*)&sockaddr_from_len);
msg_received = true;
}
char* sendMessage = getTCPMessageOut();
int sent_bytes = strlen(sendMessage);
int res_sock = -1;
while (sent_bytes>0) {
res_sock = sendto(new_socket, sendMessage, sizeof(sendMessage), MSG_NOSIGNAL, (struct sockaddr *)&cfg->sockaddr_to, (socklen_t)sizeof(cfg->sockaddr_to));
if (res_sock > -1){
break;
}
sent_bytes-=res_sock;
}
if (res_sock == -1){
perror("Send Error");
exit(EXIT_FAILURE);
}
}
}
如果我对客户端和服务器使用相同的端口,代码就可以工作。问题只是通过不同的端口发送消息。