我正在尝试通过示例创建服务器和客户端, 我在网上看到了一个例子,并试图做同样的事情,但它对我不起作用,我不明白为什么。
服务器
int main(int argc, char *argv[])
{
int socket_fd, cc, fsize;
struct sockaddr_in s_in, from;
struct { char head; u_long body; char tail;} msg;
char name[10];
socket_fd = socket (AF_INET, SOCK_DGRAM, 0);
bzero((char *) &s_in, sizeof(s_in));
s_in.sin_family = (short)AF_INET;
s_in.sin_addr.s_addr = htonl(INADDR_ANY);
s_in.sin_port = htons((u_short)0x3333);
fflush(stdout);
bind(socket_fd, (struct sockaddr *)&s_in, sizeof(s_in));
for(;;) {
fsize = sizeof(from);
recvfrom(socket_fd,name,sizeof(name),0,(struct sockaddr *)&from,&fsize);
printf("Got data : %s",name);
fflush(stdout);
}
return 0;
}
客户
int main(int argc, char *argv[])
{
int socket_fd; //creating 1 int
struct sockaddr_in dest;
struct hostent *hostptr;
struct { char head; u_long body; char tail; } msgbuf;
char name[10];
socket_fd = socket (AF_INET, SOCK_DGRAM, 0);
bzero((char *) &dest, sizeof(dest));
hostptr = gethostbyname(argv[1]);
dest.sin_family = (short) AF_INET;
bcopy(hostptr->h_addr, (char *)&dest.sin_addr,hostptr->h_length);
dest.sin_port = htons((u_short)0x3333);
printf("Enter your name: ");
scanf("%s",name);
printf("%s",name);
sendto(socket_fd,name,sizeof(name),0,(struct sockaddr *)&dest,sizeof(dest));
return 0;
}
有人可以解释我的问题吗?
答案 0 :(得分:1)
NUL - 终止你的缓冲区:
int n;
...
n = recvfrom(socket_fd,name,sizeof(name),0,(struct sockaddr *)&from,&fsize);
if (n == -1) {
perror("recvfrom");
exit(EXIT_FAILURE);
}
name[n] = '\0';
printf("Got data : %s",name);
...
另请注意,bzero
和bcopy
已弃用,请使用memset
和memmove