并发socket--练习篇
来源:互联网 发布:淘宝造物节h5 源码 编辑:程序博客网 时间:2024/06/16 21:20
这段时间在学习socket网络编程,简单记录一下:
//server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#define MAXLINE 4096int main(int argc, char** argv){ int listenfd, connfd; struct sockaddr_in servaddr; struct sockaddr_in clientaddr; socklen_t cliaddrlen; char buff[4096]; int n; pid_t pid; if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("Create socket error: %s(errno: %d)\n", strerror(errno),errno); exit(0); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(8888); if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1) { printf("Bind socket error: %s(errno: %d)\n", strerror(errno), errno); exit(0); } if(listen(listenfd, 10) == -1) { printf("Listen socket error: %s(errno: %d)\n", strerror(errno), errno); exit(0); } printf("=====Waiting for connection=====\n"); for(;;) { cliaddrlen = sizeof(clientaddr); connfd = accept(listenfd, (struct sockaddr*)&clientaddr, &cliaddrlen); char ipstring[16]; if((pid = fork()) == 0) { close(listenfd); if(connfd == -1) { printf("Accept socket error: %s(errno: %d)\n", strerror(errno), errno); continue; } inet_ntop(AF_INET, &clientaddr.sin_addr, ipstring, (socklen_t)sizeof(ipstring)); char hello[40] = {"hello "}; strcat(hello, ipstring); strcat(hello, ", you are connecting...\0"); if(send(connfd, hello, sizeof(hello), 0) < 0) { printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); exit(0); } while(n = recv(connfd, buff, MAXLINE, 0)) { buff[n] = '\0'; printf("recv msg from client(%s): %s", ipstring, buff); // fflush(stdout); } close(connfd); exit(0); } } close(connfd); close(listenfd); exit(0);}
//client.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#define MAXLINE 4096int main(int argc, char** argv){ int sockfd, n; char recvline[4096], sendline[4096]; struct sockaddr_in servaddr; if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("Create socket error: %s(errno: %d)\n", strerror(errno),errno); exit(0); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8888); if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) { printf("iner_pton error for %s\n", argv[1]); exit(0); } if(connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) { printf("connect error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } // n = recv(sockfd, recvline, 4096, 0); // recvline[n] = '\0'; // printf("%s", recvline); n = recv(sockfd, recvline, MAXLINE, 0); recvline[n] = '\0'; printf("%s\n", recvline);// fflush(stdout);do {printf("send msg to server:\n"); fgets(sendline, 4096, stdin); if(send(sockfd, sendline, sizeof(sendline),0) < 0) { printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); exit(0); } }while(sendline); close(sockfd); exit(0);}
0 0
- 并发socket--练习篇
- 【原创】TCP Socket 简单练习 --- 线程池实现并发服务器
- 【Socket编程】篇四之并发服务器
- Linux网络编程 - TCP Socket 简单练习:线程池实现并发服务器
- 并发Socket程序设计
- socket高并发
- socket服务器并发处理
- Socket编程练习(TCP)
- Socket最好的练习
- Android Socket练习任务
- socket简单练习
- Socket之UDP练习
- Socket Tcp编程练习
- python socket编程练习
- java Socket 初练习
- Socket小练习
- socket多线程并发异步通讯
- Socket编程之并发模型
- js学习
- OC 中#pragma mark [-] xxx
- 【Win 7】安装 MSXML 4.0 出现“汇编组件安装错误”的解决方案
- linux——函数库管理
- 我的游戏开发笔记(六):NavMeshAgent及自动寻径(跳跃)。
- 并发socket--练习篇
- nginx 负载均衡
- HTML5之WebSocket(仅介绍客户端的实现)
- C++项目开发常用的开源库
- 前端入门之css浮动
- BigInteger和BigDecimal的实例
- poj-1743 Musical Theme
- JavaWeb项目导出Excel文件并弹出下载框
- 在CentOS6.6下建立c++11开发环境