C++ SOCKET编程,如何监听多个端口,比如监听两个端口,关键代码该怎么写,求教求教,求代码!

 我来答
百度网友c35996c7e
2013-11-26 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:129
采纳率:0%
帮助的人:156万
展开全部
#include <stdio.h>
#include <Winsock2.h>
#include <process.h>

#pragma comment (lib, "Ws2_32.lib")

unsigned int __stdcall listeningThread(void *param)
{
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons((int)param);

int ret = bind(sockSrv, (SOCKADDR*) &addrSrv, sizeof(SOCKADDR));
ret = listen(sockSrv, 5);
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while (1)
{
SOCKET sockConn = accept(sockSrv, (SOCKADDR*) &addrClient, &len);
char sendBuf [] = "Hello World !";

send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
char recvBuf[50];
recv(sockConn, recvBuf, 50, 0);
printf("%s\n", recvBuf);
closesocket(sockConn);
}
return 0;
}
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return;
}

_beginthreadex(NULL, 0, listeningThread, (void *) 8120, 0, NULL);
_beginthreadex(NULL, 0, listeningThread, (void *) 8121, 0, NULL);
Sleep(INFINITE);
}

这个是windows平台的,创建两个线程,分别处理两个监听端口,端口通过参数传进去

追问
C++ SOCKET编程两个线程通讯互传数据怎么做,这两个线程间的数据需要互传,就是一个收的要给另一个发,一个发的要给另一个收,想不明白应该怎么做了
qmg1023
推荐于2016-07-04 · TA获得超过888个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:893万
展开全部
考虑用select系统调用吧,具体例子请自己找找

#include <sys/select.h>

int select(int maxfdp1, fd_set *restrict readfds,
fd_set *restrict writefds, fd_set
*restrict exceptfds,
struct timeval *restrict tvptr);
追问
C++ SOCKET编程两个线程通讯互传数据怎么做,这两个线程间的数据需要互传,就是一个收的要给另一个发,一个发的要给另一个收,想不明白应该怎么做了
追答
线程共用进程地址空间,直接共用一个内存块或者容器就可以了。

需要处理好并发问题,即发和收从这个内存块和容器读或写的操作不能并发。

例如,共用一个队列queue,收到的线程放到队列中,发的线程从队列中取。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式