SOCKET客户端 连接之后只能发送一次数据吗?

pleasechangegreat 2008-10-20 02:24:32
...
//创建socket
newSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
...
//连接
if ( connect(newSocket, (SOCKADDR*) &addClient, sizeof(addClient) )
== SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return FALSE;
}

//启动处理线程
unsigned threadId;
threadHandle = (HANDLE)_beginthreadex(NULL, 0,
DisposeThread, NULL, 0, &threadId);

//启动暂停事件处理线程
pauseThreadHandle = (HANDLE)_beginthreadex(NULL, 0,
PauseThread, NULL, 0, &threadId);

newSocket为全局变量。
DisposeThread与PauseThread为两个线程,都有
send(newSocket, name, strlen(name) + 1, 0);
那为什么DisposeThread中的send有效,PauseThread无效呢?

在线等。请高手不吝赐教。
...全文
331 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pleasechangegreat 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hfcarrey 的回复:]
查看服务程序中是不是对第一个 client socket 处理完毕后,将这个 client socket 给关闭了
[/Quote]

关闭是在最后关闭的。好像是线程同步的问题。
//释放资源
closesocket(newSocket);
WSACleanup();
hfcarrey 2008-10-20
  • 打赏
  • 举报
回复
查看服务程序中是不是对第一个 client socket 处理完毕后,将这个 client socket 给关闭了
pleasechangegreat 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 haoyuwind 的回复:]
LZ,貌似你的设计思路有问题,同一个资源两个线程用,不怕资源争用?
[/Quote]

说的是,可是//启动暂停事件处理线程
pauseThreadHandle = (HANDLE)_beginthreadex(NULL, 0,
PauseThread, NULL, 0, &threadId);
这个线程是
while (1)
{
WaitForSingleObject(stopEvent, INFINITE);
...
是事件触发的(用户点击暂停按钮),DisposeThread线程先于PauseThread执行。
haoyuwind 2008-10-20
  • 打赏
  • 举报
回复
LZ,貌似你的设计思路有问题,同一个资源两个线程用,不怕资源争用?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧