tcp协议的简单服务器---源码

 
下面代码是tcp协议的服务器端代码:
该源码主要用了:
socket()-------创建套套接字(支持tcp协议的)
bind()---------绑定套接字和本机网卡ip信息
accept()--------等待连接(等待客户端发来请求信息),并返回可以对可读写的


套接字(同文件描速符,一样操作)


recv()--------通过得到的可读写的套接字然后接收客户端发送来得信息


  #include <stdio.h>
  2 #include <sys/types.h>          /* See NOTES */
  3 #include <sys/socket.h>
  4 #include <netinet/in.h>
  5 #include <string.h>
  6 
  7 #define PORTS 6456
  8 
  9 int main()
 10 {
创建套接字:参数一:地址族;参数二:协议族(这用了


tcp协议);参数三:总是0(我也不清楚)
 11         int s = socket (PF_INET, SOCK_STREAM, 0);
 12         if(0 > s){
 13                 perror("socket");
 14                 return -1;
 15         }
 16 


/初始化一个三元组信息(在赋值前最好先将这段空间清零),,这个三


元组信息主要存放,支持的地址族,本机开发的端号(这个是系统级资源,套接


字是进程级资源),本机的ip设定
 17         struct sockaddr_in my_addr;
 18 
 19         memset(&my_addr, 0, sizeof(struct sockaddr));
 20 
 21         my_addr.sin_family = PF_INET;
 22         my_addr.sin_port   = htons(PORTS);
 23 //      my_addr.sin_addr.s_addr = INADDR_ANY;//这里让系统自己选择
 24         my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
 25 
 26         int addrlen = sizeof(struct sockaddr);
 27 /绑定套接字和三元组信息;三元组长度
       if(0 > bind(s, (struct sockaddr*)&my_addr, addrlen)){
 28                 perror("bind");
 29                 return -1;
 30         }
 31 
 32         listen (s, 10);
 33 
 34         //while(1)
 35 
 36         printf("server: %d\n", s);
 37 
 38         struct sockaddr_in addr;
 39         int len = 0;


//等待连接,如果没到,就会阻塞在这里
 40         int clients = accept(s, (struct sockaddr *)&addr, &len);
 41         if(0 > clients){
 42                 perror("accept");
 43         }else{
 44                 printf("%s:%d\n", inet_ntoa(addr.sin_addr), ntohs


(addr.sin_p    ort));
 45         }
 46 
 47         printf("clients: %d\n", clients);
 48 
 49 //      while(1){       
 50                 #define MAX (1024*1024)
 51                 char buf[MAX];
 52                 bzero(buf, MAX);
 53 #if 0


/接收连接发送过来的消息,放到buf中
 54                 int ret = recv(clients, buf, MAX, 0);
 55                 if(0 > ret){
 56                         perror("recv");
 57                         return -1;
 58                 }
 59 #else
/这里接收发送来得消息
 60                 int ret = read(clients, buf, MAX);
 61                 if(0 > ret){
 62                         perror("read");
 63                         return -1;
 64                 }
 65 #endif
 66                 printf("%s:%d\n", buf, ret);
 67 //      }
 68 }








下面是客户端:
下面用到:
socket()----创建套接字
connect()------------发送连接信息,这里包含要发送的服务器的三元结构,因


而可以发送到服务器,这里只是连接到对方服务器
send()----发送信息




1 #include <stdio.h>
  2 #include <sys/types.h>          /* See NOTES */
  3 #include <sys/socket.h>
  4 #include <netinet/in.h>
  5 #include<string.h>
  6 #define PORTS 6456
  7 
  8 int main()
  9 {
/创建套接字
 10         int s = socket (PF_INET, SOCK_STREAM, 0);
 11         if(0 > s){
 12                 perror("socket");
 13                 return -1;
 14         }
 15 
 16         struct sockaddr_in server_addr;
 17 
 18         memset(&server_addr, 0, sizeof(struct sockaddr));
 19         server_addr.sin_family = PF_INET;
 20         server_addr.sin_port   = htons(PORTS);
 21         server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
 22 
 23         socklen_t addrlen = sizeof(struct sockaddr_in);
 24 


/取得服务器的连接信息
 25         if(0 > connect(s, (struct sockaddr *)&server_addr, 


addrlen)){
 26                 perror("connect");
 27                 return -1;
 28         }
 29 
 30         //...
 31 //      while(1){
 32                 #define MAX (1024*1024)
 33                 char buf[MAX]="hello world";
 34 #if 0
发送信息 
 35                 int ret = send(s, buf, MAX, MSG_NOSIGNAL);
 36                 if(0 > ret){
 37                         perror("send");
 38                         break;
 39                 }
 40 #else
用write发送信息
 41                 int ret = write(s, buf, MAX);
 42                 if(0 > ret){
 43                         perror("send");
 44                 //      break;
 45                 }
 46 #endif
 47                 //sleep(1);
 48 //      }
 49 
 50         printf("----------1----------");
 51 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值