【发布时间】:2014-04-21 23:00:55
【问题描述】:
我想在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 个元素。 我能够解决分段错误,但我从客户端发送到服务器的值在服务器上接收错误。
【问题讨论】:
-
如果您提供所有代码,将会很有帮助。如果您可以使用调试器逐步执行程序,以找出崩溃发生的位置,请将此信息添加到您的问题中。谢谢
-
1)
a=(struct node *)malloc(sizeof(struct node *));你为指针分配空间;你想要一个节点的空间。 2)write(sockfd,&a,sizeof(a));你发指针;你想发送一个节点 3)你不能发送指针;它们指的是本地机器上的对象。 -
你好先生..你能帮我怎么做..现在如何传递链接列表..我正在尝试更正..但仍然无法发送