Linux环境下Server与Client交互(Socket 多线程).docx

上传人:marr****208 文档编号:132234740 上传时间:2020-05-13 格式:DOCX 页数:9 大小:16.41KB
返回 下载 相关 举报
Linux环境下Server与Client交互(Socket 多线程).docx_第1页
第1页 / 共9页
Linux环境下Server与Client交互(Socket 多线程).docx_第2页
第2页 / 共9页
Linux环境下Server与Client交互(Socket 多线程).docx_第3页
第3页 / 共9页
Linux环境下Server与Client交互(Socket 多线程).docx_第4页
第4页 / 共9页
Linux环境下Server与Client交互(Socket 多线程).docx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《Linux环境下Server与Client交互(Socket 多线程).docx》由会员分享,可在线阅读,更多相关《Linux环境下Server与Client交互(Socket 多线程).docx(9页珍藏版)》请在金锄头文库上搜索。

1、在Linux环境下实现客户端与服务器端交互的程序,可以扩展成多个客户端与服务器端交互.运用Socket与多线程实现.用法:1. 先分别编译程序.可以运用G+命令: g+ -g-o Server Server.cpp lpthread, g+ -g-o Client Client.cpp lpthread分别编译服务器端与客户端源码。2. 打开两个终端,终端的当前路径必须包括Server跟Client程序。服务器端的终端运行./Server就可以了。客户端运行./Client “你的主机名”就可以了。3. 在这两个终端输入字符串可以实现通信。Server代码:#include#include#i

2、nclude#include#include#include#include#define ERROR ERROR:#define RECEIVE RECEIVE:#define INFO INFO:#define MYPORT 3490#define BACKLOG 10#define ARRAY_SIZE 256using namespace std;typedef struct sockaddr_in SockAddr;typedef struct Parameters_tFILE* fp;int sockfd; Parameters;void* ReceiveData_Server(v

3、oid* param)Parameters* pParam = (Parameters*)param;char recvsARRAY_SIZE;int n = 0;/coutINFOpParams sockfd is (*pParam).sockfdendl;while(1)if(n = recv(*pParam).sockfd, recvs, ARRAY_SIZE, 0) = 0)return NULL;else if(n 0)coutINFOFail to receive message 0)recvsn-1 = 0;coutRECEIVErecvsendl;coutn is nendl;

4、return NULL;void* SendData_Server(void* param)char sendsARRAY_SIZE = 0;int n = 0;Parameters* pParam = (Parameters*)param;while(1)if(fgets(sends, ARRAY_SIZE, (*pParam).fp) != NULL)send(*pParam).sockfd, sends, strlen(sends), 0);bool CreateThread(FILE* fp, int sockfd)typedef void* (*Fun)(void *);Fun pF

5、un = NULL;Parameters param1, param2;pthread_t pThread1, pThread2;int ret;param1.fp = fp;param1.sockfd = sockfd;pFun = ReceiveData_Server;ret = pthread_create(&pThread1, NULL, ReceiveData_Server, ¶m1);if(ret != 0)coutERRORFail to create receive thread!endl;return false;param2.fp = stdin;param2.so

6、ckfd = sockfd;ret = pthread_create(&pThread2, NULL, SendData_Server, ¶m2);if(ret != 0)coutERRORFail to create send thread!endl;return false;/wait for child-threads to exitpthread_join(pThread1, NULL);pthread_join(pThread2, NULL);return true; int main(int args, char* argv)int ret, sockfd, newSock

7、Fd;SockAddr mySerAddr, theirAddr;socklen_t sockLen = sizeof(SockAddr);socklen_t sin_size = sizeof(SockAddr);pid_t pid=1;sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd 0)coutERRORFail to creat socket in server!endl;return -1;mySerAddr.sin_family = AF_INET;mySerAddr.sin_port = htons(MYPORT);mySerA

8、ddr.sin_addr.s_addr = htonl(INADDR_ANY);bzero(&(mySerAddr.sin_zero), 8); ret = bind(sockfd, (const struct sockaddr *)&mySerAddr, sockLen);if(ret 0)coutERRORFail to bind socket!endl;return -1;ret = listen(sockfd, BACKLOG);if(ret 0)coutERRORFail to listen!endl;return -1;elsecoutINFOServer is listennin

9、g!endl;while(1)if(pid != 0)newSockFd = accept(sockfd, (struct sockaddr *)&theirAddr, &sin_size);if(newSockFd 0)coutERRORerror in acceptendl;coutpid is pidendl;return -1;elsecoutpid is pidendl;coutINFOCreate new socket for client:(*(SockAddr*)&theirAddr).sin_addr.s_addrendl;if(pid = fork() = 0)close(

10、sockfd);CreateThread(stdin, newSockFd);close(newSockFd);else/wait for child-process to exit.pid_t pid2;pid2 = wait(NULL);coutParent process catch child process id:!pid2endl;close(newSockFd);close(sockfd);客户端代码:#include#include#include#include#include#include#includeusing namespace std;#define ERROR

11、ERROR:#define SEND SEND:#define RECEIVE RECEIVE:#define INFO INFO#define CLIENT_PORT 3490#define ARRAY_SIZE 256typedef struct sockaddr_in SockAddr;typedef struct Parameters_tFILE* fp;int sockfd;Parameters;void* SendData_Client(void* param)char sendsARRAY_SIZE = 0;int n = 0;Parameters* pParam = (Para

12、meters *)param;while(1)if(fgets(sends,ARRAY_SIZE,(*pParam).fp) != NULL)send(*pParam).sockfd, sends, strlen(sends),0);void* ReceiveData_Client(void* param)Parameters* pParam = (Parameters*)param;char recvsARRAY_SIZE;int n = 0;while(1)if(n = recv(*pParam).sockfd, recvs, ARRAY_SIZE, 0) = 0) return NULL;else if(n 0)coutINFOFail to receive message 0)recvsn-1 = 0;coutRECEIVErecvsendl;return NULL;bool CreateThread(FILE* fp, int sockfd)Paramet

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号