linux c socket client与server实例代码

来源:互联网 发布:美国的华莱士 知乎 编辑:程序博客网 时间:2024/05/22 18:42

这是最典型的client server通信代码,网上实例很多,但大部分无法编译通过(囧)


服务器端代码:

#include <stdlib.h>  #include <unistd.h>  #include <sys/types.h>  #include <stdio.h>  #include <sys/socket.h>  #include <netinet/in.h>  #include <string.h>  #include <arpa/inet.h>      int main(){      int server_fp=socket(AF_INET, SOCK_STREAM, 0);      sockaddr_in s_add;      bzero(&s_add,sizeof(struct sockaddr_in));      //服务器端的监听端口2013      s_add.sin_family=AF_INET;      s_add.sin_port=htons(2013);      bind(server_fp,(struct sockaddr *)(&s_add), sizeof(struct sockaddr));      listen(server_fp,15);                  printf("begin\n");      int sin_size=sizeof(struct sockaddr_in);      sockaddr_in c_add;      //接收客户端请求,得到了fd就得到了一切!      int fd=accept(server_fp, (struct sockaddr *)(&c_add), (socklen_t*)&sin_size);      printf("end %s\n",inet_ntoa(c_add.sin_addr));      char receive[100];      int len=read(fd,receive,100);      printf("%d %s\n",len,receive);      close(fd);    close(server_fp);    return 0;  } 


客户端代码:


#include <stdlib.h>  #include <unistd.h>  #include <sys/types.h>  #include <stdio.h>  #include <sys/socket.h>  #include <netinet/in.h>  #include <string.h>  #include <arpa/inet.h>      int main(){      int fd=socket(AF_INET, SOCK_STREAM, 0);      sockaddr_in s_add;      bzero(&s_add,sizeof(struct sockaddr_in));      //设置服务器端地址      s_add.sin_family=AF_INET;      s_add.sin_addr.s_addr= inet_addr("127.0.0.1");      s_add.sin_port=htons(2013);      //连接服务器,得到fd后 网络部分结束了,剩下的是收发数据      int ret=connect(fd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr));      printf("%d\n",ret);      char str[]="hello world";      write(fd,str,sizeof(str));    close(fd);    return 0;}




运行命令

g++ -o server server.cpp

g++ -o client client.cpp

编译成功后,

执行

./server

程序会停在accept

此时

./client

server端输出:

begin
end 127.0.0.1
12 hello world


后续希望在客户端与服务器之间传递protobuf数据,还没调试好,而且服务器需要增加线程池等,还没调好,请期待!

0 0
原创粉丝点击