【发布时间】:2014-10-06 10:18:19
【问题描述】:
Client code
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
int main ()
{
struct sockaddr_in server ;
struct socklen_t;
int sockid,status,count,count1 ;
char buffer[1024];
char buffer1[1024];
/* socket */
sockid = socket( AF_INET, SOCK_STREAM,0);
if (sockid == -1)
{
printf("could not create socket");
}
else
{
printf(" socket created\n");
}
memset((char *) &server, 0, sizeof(server));
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family =AF_INET;
server.sin_port = htons(20143);
/* connection */
status = connect(sockid ,(struct sockaddr *)&server, sizeof(struct sockaddr));
if (status == -1)
{
printf ("error in connection\n ");
}
else
{
printf("no error \n");
}
/* send*/
strcpy(buffer, "hello \n"),
printf("message: %s\n", buffer);
if(send(sockid, buffer ,strlen("buffer"),0) < 0 )
{
puts("sends failed");
return 1;
}
puts("data send");
/* receive
count1 = recv(sockid,,buf,0 );*/
if(recv(sockid, buffer1, 1024, 0) < 0 )
{
puts("receive failed ");
return 1;
}
puts("receive success");
puts(buffer1);
/*---- Print the received message ----*/
printf("Data received: %s",buffer1);
close (sockid);
}
server code is
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
struct sockaddr_in server ;
struct socklen_t ;
int s,sockid,status;
char buffer[1024];
char buffer1[1024];
/* socket */
sockid = socket(AF_INET, SOCK_STREAM,0);
if(sockid == -1)
{
printf("could not create socket");
}
{
printf(" socket created\n");
}
memset((char *)&server, 0, sizeof(server));
server.sin_addr.s_addr =inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(20143);
if((bind(sockid,(struct sockaddr *)&server, sizeof(struct sockaddr)))== -1)
{
puts("failure ");
return 1;
}
puts("success");
listen(sockid,5);
s = accept(sockid,(struct sockaddr *)&server, (socklen_t *)sizeof(server));
if(recv(sockid,buffer, 1024, 0)< 0 )
{
puts("receive failed ");
return 1;
}
puts("receive success");
puts(buffer1);
/*---- Print the received message ----*/
printf("Data received: %s",buffer);
enter code here
strcpy(buffer1,"Hello World\n");
if(send(sockid,buffer1,13,0) < 0 )
{
puts("failed ");
return 1;
}
puts("success");
close (sockid);
}
这里我试图在客户端和服务器之间建立双向连接,但我无法完成它,因为我面临绑定问题,即服务器没有与客户端绑定,每次它显示绑定错误。请为我提供足够的解决方案..
【问题讨论】:
-
它是特定于操作系统的。请编辑您的问题,例如如果为 Linux 编码,请添加标签 linux。
-
您为 sockaddr 结构提供的大小不正确。您应该使用实际结构大小
sizeof struct sockaddr_in,而不是sizeof struct sockaddr。 -
您没有检查
accept的返回值。此外,recv可以返回 0 作为远程端关闭连接的指示。在您的服务器代码中,您尝试在侦听器套接字上调用recv,而不是先前接受的客户端套接字。 Guide to Network Programming