📄 subject_40823.htm
字号:
<p>
序号:40823 发表者:xiongli 发表日期:2003-05-21 20:32:05
<br>主题:WSAStartup要调用几次?
<br>内容:我在main里面启动20个线程并发用tcp访问一个服务器<BR>我的WSAStartup在main里面调用了一次<BR>然后只有第一个访问正常<BR>其他的都出错,错误是WSAStartup没有调用<BR>我每个线程调用一次WSAStartup就完全正常<BR>但是<BR>The Windows Sockets WSAStartup function initiates use of Ws2_32.dll by a process<BR>一个进程只要调用一次就可以了阿<BR>我的主线程用waitformutilpleobject等待<BR>同时使用了正确的crt
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-21 20:46:34
<br>内容:初始化的代码 ?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-21 20:46:51
<br>内容:应该一次就可以
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:09:59
<br>内容:if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)<BR> {<BR> printf("Failed to load Winsock library!\n");<BR> return 1;<BR> }
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:10:27
<br>内容:不管是debug/release<BR>f5/ctrl+f5都试过了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:16:36
<br>内容:非常奇怪的是有时候实在socket的时候失败<BR>有的时候是在connect的时候失败
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:20:21
<br>内容:iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>iobegin<BR>fist send ok!<BR><BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>connect() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>iobegin<BR>socket() failed: 10093<BR>Press any key to continue
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-21 21:20:55
<br>内容:精简一下,打包,我调。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:35:59
<br>内容:<BR>// <BR>#include <winsock2.h><BR>#include <stdio.h><BR>#include <stdlib.h><BR>#include <process.h><BR>#define DEFAULT_COUNT 20<BR>#define DEFAULT_PORT 5150<BR>#define DEFAULT_BUFFER 2048<BR>#define DEFAULT_MESSAGE "This is a test of the emergency \<BR>broadcasting system "<BR><BR>char szServer[128], // Server to connect to<BR> szMessage[1024]; // Message to send to sever<BR>int iPort = DEFAULT_PORT; // Port on server to connect to<BR>DWORD dwCount = DEFAULT_COUNT; // Number of times to send message<BR>BOOL bSendOnly = FALSE; // Send data only; don't receive<BR><BR>//<BR>unsigned int WINAPI io(LPVOID lpParameter)<BR>{<BR> WSADATA wsd;<BR><BR>/* if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)<BR> {<BR> printf("Failed to load Winsock library!\n");<BR> return 1;<BR> }*/<BR> printf("iobegin\n");<BR> SOCKET sClient;<BR> char szBuffer[DEFAULT_BUFFER];<BR> int ret,<BR> i,j;<BR> unsigned long ul = 1;<BR> struct sockaddr_in server;<BR> struct hostent *host = NULL;<BR><BR> // Parse the command line and load Winsock<BR> //<BR> // ValidateArgs(argc, argv);<BR> <BR> strcpy(szMessage, DEFAULT_MESSAGE);<BR> //<BR> // Create the socket, and attempt to connect to the server<BR> //<BR> sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<BR> if (sClient == INVALID_SOCKET)<BR> {<BR> printf("socket() failed: %d\n", WSAGetLastError());<BR> return 1;<BR> }<BR> strcpy(szServer,"localhost");<BR> server.sin_family = AF_INET;<BR> server.sin_port = htons(iPort);<BR> server.sin_addr.s_addr = inet_addr(szServer);<BR> //<BR> // If the supplied server address wasn't in the form<BR> // "aaa.bbb.ccc.ddd" it's a hostname, so try to resolve it<BR> //<BR> if (server.sin_addr.s_addr == INADDR_NONE)<BR> {<BR> host = gethostbyname(szServer);<BR> if (host == NULL)<BR> {<BR> printf("Unable to resolve server: %s\n", szServer);<BR> return 1;<BR> }<BR> CopyMemory(&server.sin_addr, host->h_addr_list[0],<BR> host->h_length);<BR> }<BR>// MessageBox(0,"client connect begin",0,0);<BR> if (connect(sClient, (struct sockaddr *)&server, <BR> sizeof(server)) == SOCKET_ERROR)<BR> {<BR> printf("connect() failed: %d\n", WSAGetLastError());<BR> return 1;<BR> }<BR> ret = send(sClient, szMessage, 1, 0);<BR> // if(ret!=-1)printf("fist send ok!\n");<BR> ret = send(sClient, szMessage, 6, 0);<BR> // if(ret!=-1)printf("fist send ok!\n");<BR> ret = send(sClient, szMessage, 60, 0);<BR> // if(ret!=-1)printf("fist send ok!\n");<BR> char recvbuf[1000];<BR> ret=recv(sClient,recvbuf,1000,0);<BR> // if(ret!=-1)printf("fist send ok!\n");<BR> recvbuf[ret]='\0';<BR> printf(recvbuf);<BR> printf("\n");<BR> // printf("%d",GetLastError());<BR> <BR> closesocket(sClient);<BR> WSACleanup();<BR> return 0;<BR>}<BR><BR>int main()<BR>{<BR> int nmax=20;<BR> WSADATA wsd;<BR> HANDLE harray[21];<BR> if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)<BR> {<BR> printf("Failed to load Winsock library!\n");<BR> return 1;<BR> }<BR> for(int i=0;i<=nmax;i++)<BR> {<BR> harray[i]=(void*)_beginthreadex/*CreateThread*/(NULL, 0, io, NULL, 0, 0); <BR> }<BR> WaitForMultipleObjects(nmax+1,harray,1,INFINITE);<BR> return 0;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:37:09
<br>内容:server
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:37:44
<br>内容:server,here
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:dr0 回复日期:2003-05-21 21:47:44
<br>内容:WSACleanup() ? !
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-21 21:50:22
<br>内容:你在每个线程的结尾清除了winsock
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-05-21 21:50:39
<br>内容:nnd<BR>下次再也不直接把例子上的函数改个名字就开始用了<BR>io本来是他的main<BR>我改个名字自己写了一个main就开始用<BR>hoho
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-21 21:57:33
<br>内容:要改也要仔细点
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Justin Le 回复日期:2003-05-21 22:08:12
<br>内容:在线程中这样能使用吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-21 22:11:41
<br>内容:在线程中这样能使用吗? <BR>// 何意 ?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Justin Le 回复日期:2003-05-21 22:16:22
<br>内容:dr0: 我用他的example,去除了 线程中 WSACleanup();<BR>然后在main中加WSACleanup();是不是就应该正确?<BR>但是还是报错啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:FirstHoward 回复日期:2003-05-27 21:24:34
<br>内容:你开辟多个线程,每个线程都打开同一个iPort,所以你只能一次成功的机会。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:飞浪 回复日期:2003-06-01 16:04:53
<br>内容:可能是你在主函数里WSAStartup()在mian()函数的结尾没有调用相应的WSACleanup(),
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -