Linux环境下服务器和客户端的网络通信

套接口描述符使用 sockaddr_in 数据结构,有了套接口之后需要调用bind()函数把套接口绑定到本地计算机的一个接口上,使用inet_addr()函数将普遍形式的IP地址转化为无符号的整型数,调用socket()函数获得文件描述符。程序分为客户端和服务端。应用select函数来实现异步的读写操作。在服务器端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受“连接”请求,然后调用创建线程函数,创造新的线程,进入下一个循环。这样每当有一个新的“连接”被接受都会创建一个新的线程。

服务器端程序如下:

//server.c

View Code 

  1 //server.c
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <errno.h>
  5 #include <string.h>
  6 #include <sys/types.h>
  7 #include <netinet/in.h>
  8 #include <sys/socket.h>
  9 #include <sys/wait.h>
 10 #include <unistd.h>
 11 #include <arpa/inet.h>
 12 #include <sys/time.h>
 13 #include <sys/types.h>
 14 
 15 #define MAXBUF 1024
 16 
 17 
 18 int main(int argc, char **argv)
 19 {
   
 20     int sockfd, new_fd;
 21     socklen_t len;
 22     struct sockaddr_in my_addr, their_addr;
 23     unsigned int myport, lisnum;
 24     char buf[MAXBUF + 1];
 25     fd_set rfds;
 26     struct timeval tv;
 27     int retval, maxfd = -1;
 28 
 29     if (argv[1])
 30         myport = atoi(argv[1]);
 31     else
 32         myport = 7838;
 33 
 34     if (argv[2])
 35         lisnum = atoi(argv[2]);
 36     else
 37         lisnum = 2;
 38 
 39     if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) 
 40    {
   
 41         perror("socket");
 42         exit(1);
 43     }
 44 
 45     bzero(&my_addr, sizeof(my_addr));
 46     my_addr.sin_family = PF_INET;
 47     my_addr.sin_port = htons(myport);
 48     if (argv[3])
 49         my_addr.sin_addr.s_addr = inet_addr(argv[3]);
 50     else
 51         my_addr.sin_addr.s_addr = INADDR_ANY;
 52 
 53     if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr))
 54         == -1) {
   
 55         perror("bind");
 56         exit(1);
 57     }
 58 
 59     if<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值