server 和 client 通讯

圣诞老人123 2011-06-09 04:14:41
server

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

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("success\n");
printf("%d %s\n",len,buffer);
}else
{

//printf("%d\n",len);
}

}
}

}
close(sockfd);
return 0;
}


client

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

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 success\n",lenght,buffer);
}
//close(sockfd);
return 0;
}


为什么能显示连接成功 客户端发送的时候也能打印出send %d %s success
但是server端却接不到我发送的 数据 ,recv总是返回-1

还有在client上 我使用了while(1)了为什么在我第一次输入时
比如abc
打印 send success
再输入一个 随便输入 程序就结束了
...全文
57 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣诞老人123 2011-06-09
  • 打赏
  • 举报
回复
大哥你太神了 果然可以~~~
我实在没想到是参数的问题~~
我想的话要是参数不对的话 比如一般的调用参数不对肯定会编译有问题
而且我这边已经显示连接正确了
实在没想到是这个int值不对 要给地址
justkk 2011-06-09
  • 打赏
  • 举报
回复
服务端accept 的第3个参数不对,应该是一个指针

或者accept(sockfd, NULL, 0);
圣诞老人123 2011-06-09
  • 打赏
  • 举报
回复
大哥帮我看看哪有问题 看这个纠结了一下午了
圣诞老人123 2011-06-09
  • 打赏
  • 举报
回复
能显示已经连接 但是客户端发送的数据 服务器端调用recv获取不到~
justkk 2011-06-09
  • 打赏
  • 举报
回复
服务端
addr.sin_addr.s_addr = htonl(INADDR_ANY);
圣诞老人123 2011-06-09
  • 打赏
  • 举报
回复
不行呢~~
justkk 2011-06-09
  • 打赏
  • 举报
回复
试试直接指定本机地址
sockadd.sin_addr = INADDR_LOOPBACK;

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧