linux 网络编程
来源:互联网 发布:淘宝宝贝失效 编辑:程序博客网 时间:2024/05/18 02:14
linux网络编程
一、服务器:
1、调用socket(),创建socket。
2.、配置地址sockaddr/sockaddr_in
3、bind()绑定地址。
4、调用listen()函数创建一个等待队列,在其中存放未处理的连接请求。
5、调用accept()函数等待并接收客户端的连接请求。
6、send()、recv()发送接收
二、客户端
客户端与服务器大体一样,只是要通过获取服务器信息进行连接connect()。
程序:
一、服务器:
1、调用socket(),创建socket。
2.、配置地址sockaddr/sockaddr_in
3、bind()绑定地址。
4、调用listen()函数创建一个等待队列,在其中存放未处理的连接请求。
5、调用accept()函数等待并接收客户端的连接请求。
6、send()、recv()发送接收
二、客户端
客户端与服务器大体一样,只是要通过获取服务器信息进行连接connect()。
程序:
/*server.c*/#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ioctl.h>#include <unistd.h>#include <netinet/in.h>#define PORT 4321#define BUFFER_SIZE 1024#define MAX_QUE_CONN_NM 5int main(){ struct sockaddr_in server_sockaddr, client_sockaddr; int sin_size, recvbytes; int sockfd, client_fd; char buf[BUFFER_SIZE]; /*建立socket连接*/ if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1) { perror("socket"); exit(1); } printf("Socket id = %d\n",sockfd); /*设置sockaddr_in 结构体中相关参数*/ server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(PORT); server_sockaddr.sin_addr.s_addr = INADDR_ANY; bzero(&(server_sockaddr.sin_zero), 8); int i = 1;/* 使得重复使用本地地址与套接字进行绑定 */ //setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); /*绑定函数bind*/ if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1) { perror("bind"); exit(1); } printf("Bind success!\n"); /*调用listen函数*/ if (listen(sockfd, MAX_QUE_CONN_NM) == -1) { perror("listen"); exit(1); } printf("Listening....\n"); /*调用accept函数,等待客户端的连接*/ if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1) { perror("accept"); exit(1); } /*调用recv函数接收客户端的请求*/ memset(buf , 0, sizeof(buf)); if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1) { perror("recv"); exit(1); } printf("Received a message: %s\n", buf); close(sockfd); exit(0);}/*client.c*/#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ioctl.h>#include <unistd.h>#include <netdb.h>#include <netinet/in.h>#define PORT 4321#define BUFFER_SIZE 1024int main(int argc, char *argv[]){ int sockfd, sendbytes; char buf[BUFFER_SIZE]; struct hostent *host; struct sockaddr_in serv_addr; if(argc < 3) { fprintf(stderr,"USAGE: ./client Hostname(or ip address) Text\n"); exit(1); } /*地址解析函数*/ if ((host = gethostbyname(argv[1])) == NULL) { perror("gethostbyname"); exit(1); } memset(buf, 0, sizeof(buf)); sprintf(buf, "%s", argv[2]); /*创建socket*/ if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); exit(1); } /*设置sockaddr_in 结构体中相关参数*/ serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); serv_addr.sin_addr = *((struct in_addr *)host->h_addr); bzero(&(serv_addr.sin_zero), 8); /*调用connect函数主动发起对服务器端的连接*/ if(connect(sockfd,(struct sockaddr *)&serv_addr, sizeof(struct sockaddr))== -1) { perror("connect"); exit(1); } /*发送消息给服务器端*/ if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1) { perror("send"); exit(1); } close(sockfd); exit(0);}
- [Linux] Linux网络编程
- linux 网络编程----网络协议
- 学习Linux网络编程
- Linux网络编程入门
- 学习Linux网络编程
- Linux网络编程(一)
- Linux网络编程(二)
- Linux网络编程基本知识
- Linux网络编程
- linux网络编程基础
- Linux网络编程简介
- 学习Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux下网络编程
- 如何在Android中取得当前进程名
- Android数据存储(八)数据存储之Network
- geotools学习
- Silverlight与WCF之间的通信(1)SL客户端定时请求WCF服务
- Oracle动态注册
- linux 网络编程
- 一起读nodejs(二)----控制台和定时器(console &Timer)
- SQL模型类-QSqlTableModel模型
- 补充代码
- 汇编——Mov和堆栈操作原则
- javascript中创建对象的几种方式
- IE中使用window.location时会忽略base href值
- Outlets and Reference Outlets
- 对策字符串的最大长度。