首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

linux 网络编程【2】 基本阻塞通信

2013-02-25 
linux 网络编程【二】 基本阻塞通信基本流程服务器端声明句柄fd和网络地址sockaddr_in赋sockaddr_in为服务器

linux 网络编程【二】 基本阻塞通信
基本流程

    服务器端
  • 声明句柄fd和网络地址sockaddr_in赋值sockaddr_in为服务器的端口和INADDR_ANY表明监听任意连接调用socket函数创建一个socket并赋值句柄为fd调用bind函数将句柄fd和网络地址sockaddr_in进行绑定调用listen函数开始监听客户端的连接调用accept函数获得连接的客户端调用send recv函数进行数据发送和操作客户端
  • 声明句柄fd和网络地址server_addr 赋值server_addr为服务器的ip和port调用connect进行连接调用send recv函数进行数据的发送和接收操作代码分析(转载)该代码转载自点击打开链接Client 端代码:--------------------------
    /* socksrv.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h> /* for struct sockaddr_in*/#define BACKLOG 10#define MYPORT  4000int main(){  char *addr;  int sockfd;  int new_fd;  struct sockaddr_in my_addr, their_addr;  int res;  int sin_size;  char *buf;  /* 取得套接字描述符*/  sockfd = socket(AF_INET,     /* domain*/                  SOCK_STREAM, /* type*/                  0);          /* protocol*/  if (sockfd == -1) {    perror("socket");    exit(1);  }  /* Init sockaddr_in */  my_addr.sin_family = AF_INET;                /* 注意: 应使用主机字节顺序*/  my_addr.sin_port = htons(MYPORT);            /* 注意: 应使用网络字节顺序*/  my_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 使用自己的 IP 地址 */  bzero(&(my_addr.sin_zero), 8);               /* 结构的其余的部分须置 0*/  /* 指定一个套接字使用的地址及端口*/  res = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));  if (res == -1) {    perror("bind");    exit(1);  }  /* 监听请求, 等待连接*/  res = listen(sockfd,                BACKLOG);  /* 未经处理的连接请求队列可容纳的最大数目*/                 if (res == -1) {    perror("listen");    exit(1);  }  /* 接受对方的连接请求, 建立连接,返回一个新的连接描述符.   * 而第一个套接字描述符仍在你的机器上原来的端口 listen()   */  sin_size = sizeof(struct sockaddr_in);  new_fd = accept(sockfd, (void *)&their_addr, &sin_size);  buf = (char *)malloc(255);  if (buf == NULL) {    printf("malloc failed\n");    exit(1);  }  /* 接受对方发来的数据*/  res = recv(new_fd, buf, 255, 0);  if (res == -1) {    perror("recv()");    exit(1);  }  /* 关闭本次连接*/  close(new_fd);  /* 关闭系统监听*/  close(sockfd);  printf("recv data:%s\n", buf);  free(buf);  return 0;}



热点排行