gpt4 book ai didi

c - 套接字编程中的 bzero

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:40 25 4
gpt4 key购买 nike

我正在用 c 编写一个简单的客户端/服务器聊天程序。我不明白为什么一个程序有效而另一个程序无效。为正在运行的客户端和服务器提供的程序如下。当我在两个代码中将 bzero(&(server.sin_zero),8) 替换为 bzero((char*)server,sizeof(server)) 时,它会抛出“传输端点未连接”的错误。他们已经使用第二种方法实现了,并且在这个 site 上有效。 .

Client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
struct sockaddr_in server;
int s1;
char message[500];

server.sin_port = htons(5000);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
bzero(&(server.sin_zero),8);
s1 = socket(AF_INET,SOCK_STREAM,0);
if(s1 == -1) {
perror("socket not created\n");
exit(1);
}
if(connect(s1,(struct sockaddr *)&server,sizeof(server)) == -1) {
perror("not able to connect\n");
exit(1);
}

int n = read(s1,message,500);
if(n < 0) {
perror("message not recieved\n");
exit(1);
}
printf("%s\n",message);
close(s1);
return 0;

}

这是服务器程序。

  Server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
struct sockaddr_in server,client;
int s1,s2,len;
char message[500];

server.sin_port = htons(5000);
server.sin_addr.s_addr = INADDR_ANY;
server.sin_family = AF_INET;
bzero(&(server.sin_zero),8);
s1 = socket(AF_INET,SOCK_STREAM,0);
if(s1 == -1) {
perror("socket not created\n");
exit(1);
}
if(bind(s1,(struct sockaddr *)&server,sizeof(struct sockaddr)) == -1) {
perror("socket not binded\n");
exit(1);
}
if(listen(s1,5) == -1) {
perror("unable to listen");
exit(1);
}
len = sizeof(struct sockaddr_in);
s2 = accept(s1,(struct sockaddr *)&client,&len);
printf("connected");
if(s2 == -1) {
perror("unable to accept connection");
exit(1);
}
strcpy(message,"you are connected");
message[strlen(message)] = '\0';
int n = write(s2,message,strlen(message));
if(n < 0) {
perror("message not sent\n");
exit(1);
}
close(s1);
close(s2);
return 0;

}

最佳答案

bzero(&(server.sin_zero),8)

仅将 sin_zero 数组清零。

bzero((char*)server,sizeof(server))

另一方面,将整个 struct 归零,从而重置您之前设置的值(如 sin_port)。

最后,首先struct归零,然后初始化它(就像他们在site you referred to上做的一样;注意详细信息:-))。

关于c - 套接字编程中的 bzero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427256/

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