TCP 编程
来源:互联网 发布:简谱打谱软件 mac版 编辑:程序博客网 时间:2024/06/01 09:45
服务器端:
#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.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) //0.0.0.0为广播地址,也就是任意地址的意思,但是你无法设置其它电脑上的端口方式,最后的结果就是进行了本机设置。 { 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);}
客户端:
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.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);}
- TCP编程
- TCP编程
- TCP 编程
- TCP 编程。
- TCP编程
- TCP编程
- TCP编程
- TCP编程
- TCP编程
- tcp编程
- TCP编程
- TCP编程
- TCP编程
- TCP编程
- tcp编程
- TCP编程
- TCP编程
- TCP编程
- oracle 11g导出的dmp数据导入到oracle10g
- 测试sqlplus连接遇到错误 syntax error near unexpected token `('
- ubuntu 的挂起与休眠
- eCos FrameBuffer driver
- 嵌入式Linux入门学习规划(转)
- TCP 编程
- Java基础_I/O流
- 收藏几个blog和了解几个开源项目
- 数据结构_链表_稀疏多项式求值_C++实现
- WUBI安装UBUNTU,优化 swap 交换分区及调整swap大小
- Linux操作系统下三种配置环境变量的方法
- 数据结构_链表_多项式求导_C++实现
- 利用JLink来学习USB
- 微软展示win8开放式开发环境 向开发者示好