套接字和线程,套接字和线程·求求·
套接字和线程,套接字和线程·····求求求助····
char sb[500]= {0}, rst;
gethostname(sb, 500);
send(svr_conn,sb,strlen(sb),0);
sb[0] = '\01';
send(svr_conn,sb,1,0);
recv(svr_conn, &rst, 1, 0);//或者read(svr_conn,&rst,1);
其中svr_conn = socket(AF_INET, SOCK_STREAM, 0);
有一段代码如上,在linux下最后一行是read(),现在移植到windows下,我将read()改成了recv(),但是程序每次运行到这就停在这,如果我在recv()前加上
flags = 1;
ioctlsocket(svr_conn, FIONBIO, &flags);
n = recv(svr_conn, &rst, 1, 0);
设置非阻塞,那么recv()返回值n为-1,还是没读取,现在不知该怎么办,求住了****大侠,大侠说可以使用一个独立的线程一直接收消息,不在主线程中处理,但是不知该怎么做,使用独立的线程处理是用CreateThread()创建线程吗,那我创建了线程后我该怎样和程序中socket()创建的套接字svr_conn联系起来呢,recv()是应该放在ThreadFunc()调用?
------解决方案--------------------
创建线程:CreateThread
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
SIZE_T dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument 通过这个传递参数
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier);
是的,在ThreadFunc()调用
------解决方案--------------------
WIndows下可以用WSAAsyncSelect,WSAAsyncEvent等异步IO模型,当然这些模型肯定涉及线程了,找相关的书研究研究吧。
char sb[500]= {0}, rst;
gethostname(sb, 500);
send(svr_conn,sb,strlen(sb),0);
sb[0] = '\01';
send(svr_conn,sb,1,0);
recv(svr_conn, &rst, 1, 0);//或者read(svr_conn,&rst,1);
其中svr_conn = socket(AF_INET, SOCK_STREAM, 0);
有一段代码如上,在linux下最后一行是read(),现在移植到windows下,我将read()改成了recv(),但是程序每次运行到这就停在这,如果我在recv()前加上
flags = 1;
ioctlsocket(svr_conn, FIONBIO, &flags);
n = recv(svr_conn, &rst, 1, 0);
设置非阻塞,那么recv()返回值n为-1,还是没读取,现在不知该怎么办,求住了****大侠,大侠说可以使用一个独立的线程一直接收消息,不在主线程中处理,但是不知该怎么做,使用独立的线程处理是用CreateThread()创建线程吗,那我创建了线程后我该怎样和程序中socket()创建的套接字svr_conn联系起来呢,recv()是应该放在ThreadFunc()调用?
------解决方案--------------------
创建线程:CreateThread
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
SIZE_T dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument 通过这个传递参数
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier);
是的,在ThreadFunc()调用
------解决方案--------------------
WIndows下可以用WSAAsyncSelect,WSAAsyncEvent等异步IO模型,当然这些模型肯定涉及线程了,找相关的书研究研究吧。