当前位置: 首页 > news >正文

家里电脑做网站服务器优秀原创设计网站

家里电脑做网站服务器,优秀原创设计网站,高端模版网站,html空白模板下载摘抄自 https://blog.csdn.net/lovekun1989/article/details/41042273 https://blog.csdn.net/Ctrl_qun/article/details/52524086 分为无select和有select版本#xff0c;无select只能一个服务端一个客户端#xff0c;有select能一个服务端对应多个客户端。 无select#x…摘抄自 https://blog.csdn.net/lovekun1989/article/details/41042273 https://blog.csdn.net/Ctrl_qun/article/details/52524086 分为无select和有select版本无select只能一个服务端一个客户端有select能一个服务端对应多个客户端。 无select服务端代码 /*socket tcp服务器端*/ #include sys/stat.h #include fcntl.h #include errno.h #include netdb.h #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h#include stdio.h #include string.h #include stdlib.h #include unistd.h#define SERVER_PORT 5555/*监听后一直处于accept阻塞状态直到有客户端连接当客户端如数quit后断开与客户端的连接*/int main() {//调用socket函数返回的文件描述符int serverSocket;//声明两个套接字sockaddr_in结构体变量分别表示客户端和服务器struct sockaddr_in server_addr;struct sockaddr_in clientAddr;int addr_len sizeof(clientAddr);int client;char buffer[200];int iDataNum;//socket函数失败返回-1//int socket(int domain, int type, int protocol);//第一个参数表示使用的地址类型一般都是ipv4AF_INET//第二个参数表示套接字类型tcp面向连接的稳定数据传输SOCK_STREAM//第三个参数设置为0if((serverSocket socket(AF_INET, SOCK_STREAM, 0)) 0){perror(socket);return 1;}bzero(server_addr, sizeof(server_addr));//初始化服务器端的套接字并用htons和htonl将端口和地址转成网络字节序server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);//ip可是是本服务器的ip也可以用宏INADDR_ANY代替代表0.0.0.0表明所有地址server_addr.sin_addr.s_addr htonl(INADDR_ANY);//对于bindaccept之类的函数里面套接字参数都是需要强制转换成(struct sockaddr *)//bind三个参数服务器端的套接字的文件描述符if(bind(serverSocket, (struct sockaddr *)server_addr, sizeof(server_addr)) 0){perror(connect);return 1;}//设置服务器上的socket为监听状态if(listen(serverSocket, 5) 0) {perror(listen);return 1;}while(1){printf(Listening on port: %d\n, SERVER_PORT);//调用accept函数后会进入阻塞状态//accept返回一个套接字的文件描述符这样服务器端便有两个套接字的文件描述符//serverSocket和client。//serverSocket仍然继续在监听状态client则负责接收和发送数据//clientAddr是一个传出参数accept返回时传出客户端的地址和端口号//addr_len是一个传入-传出参数传入的是调用者提供的缓冲区的clientAddr的长度以避免缓冲区溢出。//传出的是客户端地址结构体的实际长度。//出错返回-1client accept(serverSocket, (struct sockaddr*)clientAddr, (socklen_t*)addr_len);if(client 0){perror(accept);continue;}printf(\nrecv client data...n);//inet_ntoa ip地址转换函数将网络字节序IP转换为点分十进制IP//表达式char *inet_ntoa (struct in_addr);printf(IP is %s\n, inet_ntoa(clientAddr.sin_addr));printf(Port is %d\n, htons(clientAddr.sin_port));while(1){iDataNum recv(client, buffer, 1024, 0);if(iDataNum 0){perror(recv);continue;}buffer[iDataNum] \0;if(strcmp(buffer, quit) 0)break;printf(%drecv data is %s\n, iDataNum, buffer);send(client, buffer, iDataNum, 0);}}return 0; }无select客户端代码 /*socket tcp客户端*/ #include sys/stat.h #include fcntl.h #include errno.h #include netdb.h #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h#include stdio.h #include string.h #include stdlib.h #include unistd.h#define SERVER_PORT 5555/*连接到服务器后会不停循环等待输入输入quit后断开与服务器的连接*/int main() {//客户端只需要一个套接字文件描述符用于和服务器通信int clientSocket;//描述服务器的socketstruct sockaddr_in serverAddr;char sendbuf[200];char recvbuf[200];int iDataNum;if((clientSocket socket(AF_INET, SOCK_STREAM, 0)) 0){perror(socket);return 1;}serverAddr.sin_family AF_INET;serverAddr.sin_port htons(SERVER_PORT);//指定服务器端的ip本地测试127.0.0.1//inet_addr()函数将点分十进制IP转换成网络字节序IPserverAddr.sin_addr.s_addr inet_addr(127.0.0.1);if(connect(clientSocket, (struct sockaddr *)serverAddr, sizeof(serverAddr)) 0){perror(connect);return 1;}printf(connect with destination host...\n);while(1){printf(Input your world:);scanf(%s, sendbuf);printf(\n);send(clientSocket, sendbuf, strlen(sendbuf), 0);if(strcmp(sendbuf, quit) 0)break;iDataNum recv(clientSocket, recvbuf, 200, 0);recvbuf[iDataNum] \0;printf(recv data of my world is: %s\n, recvbuf);}close(clientSocket);return 0; }有select服务端代码 /*socket tcp服务器端*/ #include sys/stat.h #include fcntl.h #include errno.h #include netdb.h #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h#include stdio.h #include string.h #include stdlib.h #include unistd.h#define SERVER_PORT 5555 #define CLIENT_MAX 5 #define BUFFER_SIZE 200int main() {int serverSocket;struct sockaddr_in server_addr;struct sockaddr_in clientAddr;int addr_len sizeof(clientAddr);int client, i, ret;char buffer[BUFFER_SIZE];char in_msg[BUFFER_SIZE];char recv_msg[BUFFER_SIZE];int iDataNum;int client_fds[CLIENT_MAX];fd_set server_fd_set;int max_fd -1;struct timeval tv;if((serverSocket socket(AF_INET, SOCK_STREAM, 0)) 0){perror(socket);return 1;}bzero(server_addr, sizeof(server_addr));//初始化服务器端的套接字并用htons和htonl将端口和地址转成网络字节序server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);//ip可是是本服务器的ip也可以用宏INADDR_ANY代替代表0.0.0.0表明所有地址server_addr.sin_addr.s_addr htonl(INADDR_ANY);//对于bindaccept之类的函数里面套接字参数都是需要强制转换成(struct sockaddr *)//bind三个参数服务器端的套接字的文件描述符if(bind(serverSocket, (struct sockaddr *)server_addr, sizeof(server_addr)) 0) {perror(connect);return 1;}if(listen(serverSocket, 5) 0) {perror(listen);return 1;}while(1) {tv.tv_sec 20;tv.tv_usec 0;FD_ZERO(server_fd_set);FD_SET(STDIN_FILENO, server_fd_set);if (max_fd STDIN_FILENO) {max_fd STDIN_FILENO;}FD_SET(serverSocket, server_fd_set);if (max_fd serverSocket) {max_fd serverSocket;}for (i 0; i CLIENT_MAX; i) {if (client_fds[i] ! 0) {FD_SET(client_fds[i], server_fd_set);if (max_fd client_fds[i]) {max_fd client_fds[i];}}}ret select(max_fd 1, server_fd_set, NULL, NULL, tv);if (ret 0) {perror(select error);continue;} else if (ret 0) {printf(wait ...\n);continue;} else {if (FD_ISSET(STDIN_FILENO, server_fd_set)) {printf(send msg:);memset(in_msg, 0, BUFFER_SIZE);fgets(in_msg, BUFFER_SIZE, stdin);if (strcmp(in_msg, quit) 0) {exit(0);}for (i 0; i CLIENT_MAX; i) {if (client_fds[i] ! 0) {printf(send msg to [i:%d] [fd:%d]..\n, i, client_fds[i]);send(client_fds[i], in_msg, BUFFER_SIZE, 0);}}}if (FD_ISSET(serverSocket, server_fd_set)) {client accept(serverSocket, (struct sockaddr*)clientAddr, (socklen_t*)addr_len);if(client 0) {int index -1;for (i 0; i CLIENT_MAX; i) {if (client_fds[i] 0) {client_fds[i] client;index i;break;}}if (index 0) {printf(add client [%d] success, %s:%d.\n, index, inet_ntoa(clientAddr.sin_addr),htons(clientAddr.sin_port));} else {memset(in_msg, 0, BUFFER_SIZE);strcpy(in_msg, add client fail, reach max client.\n);send(client, in_msg, BUFFER_SIZE, 0);printf(add client fail, reach max client.\n);}}}for (i 0; i CLIENT_MAX; i) {if (client_fds[i] !0 ) {if (FD_ISSET(client_fds[i], server_fd_set)) {memset(recv_msg, 0, BUFFER_SIZE);iDataNum recv(client_fds[i], recv_msg, BUFFER_SIZE, 0);if (iDataNum 0) {perror(recv);continue;} else if (iDataNum 0) {if (iDataNum BUFFER_SIZE) {iDataNum BUFFER_SIZE;}recv_msg[iDataNum] \0;printf(recv %d msg:%s.\n, client_fds[i], recv_msg);} else {FD_CLR(client_fds[i], server_fd_set);client_fds[i] 0; printf(client (%d) exit.\n, i);}}}}}}return 0; } 有select客户端代码 /*socket tcp客户端*/ #include sys/stat.h #include fcntl.h #include errno.h #include netdb.h #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h#include stdio.h #include string.h #include stdlib.h #include unistd.h#define SERVER_PORT 5555/*连接到服务器后会不停循环等待输入输入quit后断开与服务器的连接*/int main() {//客户端只需要一个套接字文件描述符用于和服务器通信int clientSocket;//描述服务器的socketstruct sockaddr_in serverAddr;char sendbuf[200];char recvbuf[200];int iDataNum;fd_set client_fd_set;struct timeval tv;int ret;if((clientSocket socket(AF_INET, SOCK_STREAM, 0)) 0){perror(socket);return 1;}serverAddr.sin_family AF_INET;serverAddr.sin_port htons(SERVER_PORT);//指定服务器端的ip本地测试127.0.0.1//inet_addr()函数将点分十进制IP转换成网络字节序IPserverAddr.sin_addr.s_addr inet_addr(127.0.0.1);if(connect(clientSocket, (struct sockaddr *)serverAddr, sizeof(serverAddr)) 0){perror(connect);return 1;}printf(connect with destination host...\n);while(1){tv.tv_sec 20;tv.tv_usec 0;FD_ZERO(client_fd_set); FD_SET(STDIN_FILENO, client_fd_set);FD_SET(clientSocket, client_fd_set);ret select(clientSocket 1, client_fd_set, NULL, NULL, tv);if (ret 0) {perror(select error);continue;} else if (ret 0) {//超时continue;} if(FD_ISSET(STDIN_FILENO, client_fd_set)) {memset(sendbuf, 0, 200);scanf(%s, sendbuf);send(clientSocket, sendbuf, strlen(sendbuf), 0);printf(send msg: %s\n);if(strcmp(sendbuf, quit) 0) {break;}}if(FD_ISSET(clientSocket, client_fd_set)) {memset(recvbuf, 0, 200);iDataNum recv(clientSocket, recvbuf, 200, 0);if (iDataNum 0) {recvbuf[iDataNum] \0;printf(recv data of my world is: %s, recvbuf);} else if(iDataNum 0) {printf(接受消息出错!\n);} else {printf(服务器端退出!\n);exit(0); }}}close(clientSocket);return 0; }
http://www.pierceye.com/news/958885/

相关文章:

  • 门户网站建站目标泰安招聘信息最新招聘2022
  • 电商网站建设效果app技术
  • 关于文化的网站模板做免费小说网站怎样赚钱
  • 做外贸的人常用的网站黄骅贴吧二手房
  • 网站建设科目提供网站建设教学视频
  • iis搭建网站教程win10淘宝客网站建设的策略
  • 怎么做一个网站 免费90平方设计
  • 网站建设的目的与意义是什么东营网站建设教程
  • 盐城seo网站优化珠海微信网站
  • 杭州市住房和城乡建设部网站网站建设项目计划书如何写
  • 免费找客户网站wordpress knowhow 下载
  • 大连企业招聘网站网站功能描述书须包含哪些内容
  • 教用vs2013做网站的书王烨医生
  • 滨州网站建设费用哪家购物网站建设好
  • 网站开发客户流程 6个阶段wordpress添加多个下载地址
  • 莱芜网络公司网站深圳网站建设raygf
  • pythom+网站开发规范wordpress用户权利
  • 国外营销型网站建设c网站开发
  • 深圳建设厅网站网站建设平台开发
  • 网站开发咨询seo点击优化
  • 靖安县城乡规划建设局网站做的美食视频网站
  • 福永网站推广徽标设计制作
  • 做网站发布网网站需求建设书
  • 咖啡店网站建设模版四川建设网四川住建厅
  • 官方网站建设怎么样郑州搜索引擎优化
  • 三只松鼠网站谁做的大学网页设计作业
  • 关于建设网站的请示做哪种类型的网站赚钱呢
  • 西安网站seo优化做cpa广告建什么网站好
  • 南京手机网站开发网站建设需要哪些岗位
  • 青白江区网站开发招聘宿迁网站设计