设为首页 加入收藏

TOP

C语言实现服务器与客户端
2013-09-24 09:19:42 来源: 作者: 【 】 浏览:147
Tags:语言 实现 服务器 客户端

  服务器代码:

  #include<sys/socket.h>

  #include<netinet/in.h>

  #include<sys/types.h>

  #include<stdlib.h>

  #include<stdio.h>

  #include<string.h>

  int main()

  {

  int res,listenfd,clientfd;   //返回值,监听套接字,客户套接字

  char buff[BUFSIZ]="";

  int len;

  struct sockaddr_in serveraddr;  //地址类型

  bzero(&serveraddr,sizeof(serveraddr));   //清空

  serveraddr.sin_family=AF_INET;   //使用AF_INET域

  serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);    //可以连接到本服务器的地址类型,即IP类型,这里是任意类型

  serveraddr.sin_port=htons(50002);//指定端口号

  len=sizeof(serveraddr);

  listenfd=socket(AF_INET,SOCK_STREAM,0); //创建套接字

  bind(listenfd,(struct sockaddr*)&serveraddr,len);//命名套接字

  listen(listenfd,23);  //设置可连接的数量

  clientfd=accept(listenfd,NULL,NULL);  //接受链接

  printf("connecct a client\n");

  while(strncmp(buff,"end",3))

  {

  res=read(clientfd,buff,BUFSIZ); //从客户端读取数据

  write(2,buff,res); //把数据显示到显示器,最好用write来显示,如果用printf灯可能显示上次留下的数据

  write(clientfd,"server",6); //往客户端写数据

  }

  close(clientfd);//关闭客户端

  close(listenfd); //关闭监听

  exit(0);

  }

  客户端代码:

  #include<sys/socket.h>

  #include<sys/types.h>

  #include<netinet/in.h>

  #include<stdio.h>

  #include<stdlib.h>

  #include<string.h>

  int main(int argc,char *argv[])

  {

  int res,connfd,len;   //返回值,连接套接字,地址长度

  struct sockaddr_in connaddr;  //客户端要链接的服务器的地址,应该与服务器的地址一致

  char buff[BUFSIZ];

  bzero(&connaddr,sizeof(connaddr));   //清空套接字

  if(argc<2)

  {

  printf("the option is too less\n");

  exit(0);

  }

  connaddr.sin_family=AF_INET;    //使用AF_INET域

  connaddr.sin_addr.s_addr=inet_addr(argv );//确定要链接的地址

  connaddr.sin_port=htons(50002);//要链接的端口号

  connfd=socket(AF_INET,SOCK_STREAM,0);//创建套接字

  len=sizeof(connaddr);//获取地址长度

  connect(connfd,(struct sockaddr*)&connaddr,len);//创建链接

  write(connfd,"Hello !",7);//往服务器写数据

  while(res=read(connfd,buff,BUFSIZ))

  {

  printf("%d\n",res); //显示收到的字节数

  res=read(fileno(stdin),buff,BUFSIZ); //从服务器读取数据

  write(connfd,buff,res);

  }

  close(connfd);//关闭套接字

  exit(0);

  }

  虽然每次服务器,客户端都会给对方发送一个ACK来确认收到,但read函数一般不会读取到,如果某一方发送FIN或RST信号,read都会当作读到文件尾来处理,即返回0;

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言对象化编程 下一篇C语言内存中结构体字节对齐

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: