我想在c中的套接字编程中从客户端向服务器发送链接列表。请允许任何人帮助我...以下是链接列表中节点的结构。
struct node
{
int data;
struct node * next;
};
基本上我想将链接列表从客户端发送到服务器,然后希望服务器对链接列表进行排序并将其返回给客户端
客户代码:
#define MAX 100
#define PORT 5000
#define SA struct sockaddr
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *a=NULL;
a=(struct node *)malloc(sizeof(struct node *));
int sockfd,connfd;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(PORT);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0)
{
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
printf("\nEnter the data");
scanf("%d",&a->data);
write(sockfd,&a,sizeof(a));
printf("\ndata sent to the server");
close(sockfd);
}
服务器代码:
#define MAX 100
#define PORT 5000
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *a=NULL;
a=(struct node *)malloc(sizeof(struct node *));
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(struct sockaddr *)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,NULL,NULL);
if(connfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
read(sockfd,&a,sizeof(a));
printf("\ndata read from the client\n");
printf("%d\n",a->data);
close(sockfd);
}
我刚刚在链接列表中添加了1个元素。 我能够解决分段错误,但是我在客户端发送到服务器的值在服务器上收到错误。
答案 0 :(得分:3)
首先,来自客户端地址空间的指针值,即使在同一台机器上,在服务器端也没有任何意义,所以我建议只发送节点值。
然后,您需要检查write()
和read()
的返回值 - 它们会告诉您可以发送和接收的字节数。这里的根本问题是连接的TCP套接字为您提供了一个完整的双工流字节,它们对您的应用程序级“消息”一无所知。这意味着一个write()
可以对应多个read()
,反之亦然。
此外,根据上述情况,接收方需要知道预期有多少字节(或消息,如果它们具有已知大小)。在这个特定示例中,最简单的方法是在列表中添加项目数量的“list”消息。