Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c中的线程服务器_C_Multithreading_Sockets_Tcp - Fatal编程技术网

c中的线程服务器

c中的线程服务器,c,multithreading,sockets,tcp,C,Multithreading,Sockets,Tcp,我以前没有找到我问题的答案,也不知道我想做的事情是否有一个特定的名称,基本上我有一个运行模拟的程序,在后台有图形界面和计算,我想通过tcp基本服务器/客户端的命令来控制它,但这意味着我必须将服务器功能合并到控制功能中,所以我将服务器放在线程中,我在主功能中运行一些东西,而我调用线程中的服务器功能只是为了测试,但是我不能向服务器发送任何东西,我的客户端应用程序没有得到响应,服务器也没有收到任何东西。。。代码很混乱,因为我正在测试其中的很多东西,而且标识也很混乱 包括 包括 包括 包括 包括 包括

我以前没有找到我问题的答案,也不知道我想做的事情是否有一个特定的名称,基本上我有一个运行模拟的程序,在后台有图形界面和计算,我想通过tcp基本服务器/客户端的命令来控制它,但这意味着我必须将服务器功能合并到控制功能中,所以我将服务器放在线程中,我在主功能中运行一些东西,而我调用线程中的服务器功能只是为了测试,但是我不能向服务器发送任何东西,我的客户端应用程序没有得到响应,服务器也没有收到任何东西。。。代码很混乱,因为我正在测试其中的很多东西,而且标识也很混乱

包括 包括 包括 包括 包括 包括 int检验=0; 无效线程服务器{ int sockfd、newsockfd、portno、clilen; 字符缓冲区[256]; 服务地址中的结构sockaddr\u,cli\u addr; int n,c; /*第一次调用套接字函数*/ sockfd=socketAF_INET,SOCK_STREAM,0; 如果sockfd<0 { PerroError开口插座; 出口1; } /*初始化套接字结构*/ bzerochar*&serv_addr,sizeofserv_addr; 端口号=5001; serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=INADDR_ANY; serv_addr.sin_port=htonsportno; /*现在使用bind调用绑定主机地址*/ 如果bindsockfd、结构sockaddr*&服务地址, sizeofserv_addr<0 { 装订错误; 出口1; } /*现在开始监听客户端,这里将显示该过程 *进入睡眠模式并等待传入连接 */ listensockfd,5; clilen=sizeofcli\u addr; 惠莱克{ /*接受来自客户端的实际连接*/ newsockfd=acceptsockfd,结构sockaddr*&cli\u addr, &克莱伦; 如果newsockfd<0 { 接受错误; 出口1; } /*如果建立了连接,则开始通信*/ b0缓冲区,256; n=读取新闻sockfd,缓冲区,255; 如果n<0 { 从插座上读取错误信息; 出口1; } //ifbuffer[0]==t{ //c=0; //出口1; //}否则{ //c=1; //} printfHere是消息:%s\n,缓冲区; /*向客户端写入响应*/ n=writenewsockfd,我收到你的消息了,18; 如果n<0 { 向套接字写入错误; 出口1; } 测试=1; } //返回0; } 真空总管{ pthread_t线程[1]; int rc; 长t; chark; printfIn main:正在创建线程%ld\n,t; rc=pthread_create&threads[t],NULL,threadServer,void*t; 红十字与红新月联会{ printfERROR;pthread_create的返回代码为%d\n,rc; 出口-1; } while1{ printftype任意键:\n; 扫描%c,&k; 打印您键入的%c\n,k; printftesting服务器线程:%d\n,测试; } /*main应该做的最后一件事*/ pthread_exitNULL; } 我的客户端应用程序没有收到响应,服务器也没有收到任何东西。两边都没有一个字节?没有错误消息,什么都没有?您可能应该添加更多的日志语句,以了解代码的去向。或者简单地使用调试器。还要始终测试读取返回的内容。我不仅提到了错误案例,也提到了^2:Print logging to stderr,还提到了stout,因为前者是无缓冲的,因此会立即出现。客户端代码在哪里?main不执行任何套接字写入或读取。请注意,在main中t应初始化为0。另外,我会在accept之前和之后放置printf,在证明线程实际启动之前,在给出客户端正在尝试连接的一些指示之后。