【发布时间】:2020-12-27 00:36:28
【问题描述】:
我已经编写了用于实验的服务器和客户端程序。我想要达到这个效果:一旦服务器传输“HELLO”,客户端就会收到它并发送回“HELLO FROM WIN”并等待下一个信息。但是,服务器只得到第一个响应,客户端崩溃(几秒钟后关闭),下面是一些代码。
client.c
int main(int argc, char * argv[]){
char receive[6] = "";
char *send = "HELLO FROM WIN";
startupWSA();
SOCKET sock = createTCPSocket();
while(1){
recv(sock,receive,6,0);
printf("%s\n",payload);
printf("%s\n",receive);
memset(receive,'\0',6);
sendto(sock,send,16,0,(const struct sockaddr *)&addr,sizeof(addr));
memset(send,'\0',16);
}
}
server.py
from socket import *
serverPort = 5555
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
print('socket is ready')
connectionSocket,addr = serverSocket.accept()
while True:
send = input('>')
connectionSocket.send(send.encode())
receive = connectionSocket.recv(1024).decode()
print(receive)
有人可以帮助我吗?谢谢。
【问题讨论】:
-
如果客户端死了,这说明你的服务器只得到 1 个响应。
-
您在 C 程序中收到的字符串很可能不会以空字符结尾,这意味着您在打印时可能会越界。
-
你为什么要
memset(send,'\0',16);? -
您不能将
sendto与TCP 套接字一起使用,请使用send -
另外,您的局部变量
send正在从套接字库中隐藏send函数