server 和 client 通讯
来源: 互联网 发布时间:2016-12-05
本文导语: server #include #include #include #include #include int main() { int n; int sockfd,newsockfd; struct sockaddr_in sockadd,newsockadd; sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&sockadd,sizeof(struct sockaddr_in)); sockadd.sin_family = AF_INET; socka...
server
client
为什么能显示连接成功 客户端发送的时候也能打印出send %d %s success
但是server端却接不到我发送的 数据 ,recv总是返回-1
还有在client上 我使用了while(1)了为什么在我第一次输入时
比如abc
打印 send success
再输入一个 随便输入 程序就结束了
#include
#include
#include
#include
#include
int main()
{
int n;
int sockfd,newsockfd;
struct sockaddr_in sockadd,newsockadd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&sockadd,sizeof(struct sockaddr_in));
sockadd.sin_family = AF_INET;
sockadd.sin_port = htons(3633);
bind(sockfd, &sockadd, sizeof(struct sockaddr));
listen(sockfd, 2);
for(;;)
{
newsockfd = accept(sockfd, &newsockadd, sizeof(struct sockaddr));
printf("somebody has connected!!n");
if(!fork())
{
while(1)
{
char buffer[101];
bzero(buffer,101);
int len = recv(newsockfd, buffer, 100,0);
if(len > 0)
{
printf("successn");
printf("%d %sn",len,buffer);
}else
{
//printf("%dn",len);
}
}
}
}
close(sockfd);
return 0;
}
client
#include
#include
#include
#include
#include
#include
#include
int main()
{
int sockfd;
struct sockaddr_in sockadd;
struct hostent *he;
he = gethostbyname("localhost");
bzero(&sockadd, sizeof(struct sockaddr));
sockadd.sin_family = AF_INET;
sockadd.sin_addr = *((struct in_addr *)he->h_addr);
sockadd.sin_port = htons(3633);
sockfd = socket(AF_INET,SOCK_STREAM, 0);
connect(sockfd, &sockadd, sizeof(struct sockaddr));
char buffer[101];
char revbuf[101];
int lenght;
while(1)
{
bzero(buffer,101);
scanf("%s",buffer);
lenght = send(sockfd, buffer, sizeof(buffer), 0);
if(lenght > 0)
printf("send %d %s successn",lenght,buffer);
}
//close(sockfd);
return 0;
}
为什么能显示连接成功 客户端发送的时候也能打印出send %d %s success
但是server端却接不到我发送的 数据 ,recv总是返回-1
还有在client上 我使用了while(1)了为什么在我第一次输入时
比如abc
打印 send success
再输入一个 随便输入 程序就结束了
|
服务端accept 的第3个参数不对,应该是一个指针
或者accept(sockfd, NULL, 0);
或者accept(sockfd, NULL, 0);