linux c socket client与server实例代码

本文提供了一组C++ Socket编程的典型示例代码,包括客户端和服务端的实现。通过这些示例,读者可以了解如何建立TCP连接、发送与接收数据,并展示了编译及运行流程。

这是最典型的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数据,还没调试好,而且服务器需要增加线程池等,还没调好,请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值