#define BUFSIZE 256
int sockfd;
char buf[BUFSIZE];
struct sockaddr_in server_addr, client_addr;
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(4100);
while(1){
printf("to server: ");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf)-1] = '\0';
sendto(sockfd, buf, BUFSIZE, 0, (struct sockaddr *)&server_addr, sizeof(server_addr);
//memset(buf, 0, BUFSIZE);
recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr *)&client_addr, sizeof(client_addr);
printf("from: %s\n", buf);
}
//SERVER code
#define BUFSIZE 256
int sockfd;
char buf[BUFSIZE];
struct sockaddr_in server_addr, client_addr;
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(4100);
bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
while(1){
recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr *)&client_addr, sizeof(client_addr);
printf("from client: %s\n", buf);
printf("to client: ");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf)-1] = '\0';
sendto(sockfd, buf, BUFSIZE, 0, (struct sockaddr *)&client_addr, sizeof(client_addr);
}
Я запускаю две замазки на одном компьютере и запускаю клиент и сервер соответственно.Приведенный выше код является частью исходного кода клиента.
Запустите клиенты и серверы соответственно, клиент сначала отправляет сообщение, а когда сервер получает сообщение, он отправляет новое сообщение клиенту.Клиент печатает сообщение, полученное с сервера.(не асинхронный)
Клиент отправляет «abcdefg» на сервер и получает «zxc» от сервера.Затем, когда я вывожу буфер, он печатает только «zxc» вместо «zxcdefg».
Мне интересно, почему вывод выглядит так, хотя я не вызывал метод memset ().