vc++ 多執行緒程式設計 socket通訊
#include "stdafx.h"
#include
//伺服器端程式
dword winapi answerthread(lpvoid lparam)
int main()
sockaddr_in service;
service.sin_family=af_inet;
service.sin_addr.s_addr=inet_addr("172.16.3.250");
service.sin_port=htons(2501);
if(bind(m_socket,(sockaddr*)&service,sizeof(service))==socket_error)
else
printf("bind ok.\n");
if(listen(m_socket,20)==socket_error)
printf("error listening on socket.\n");
else
printf("listening ok.\n");
socket acceptsocket;
printf("waiting for a client to connect...\n");
while(1)
printf("client connected.\n");
dword dwthreadid;
handle hthread;
hthread=createthread(null,null,answerthread,
(lpvoid)acceptsocket,0,&dwthreadid);
closehandle(hthread);
//sleep(4000);
closesocket(acceptsocket);
}closesocket(m_socket);
return 0;
}該伺服器端程式為什麼如果有注釋掉的sleep(4000)客戶端就接收返回正確的資料,注釋掉後就接受到0個字元??
提問者: wiggle_waggle - 實習生 一級 最佳答案你給客戶端傳送資料是用send麼
如果沒sleep的話,你建立了乙個新執行緒,建立新執行緒的同時,當前執行緒也在執行,socket都被你關掉了,還怎麼send??
執行緒跟函式是不同的,函式是等呼叫結束後才執行下乙個語句
int send_num=::send(clientsocket,sztext,strlen(sztext),0); 應該要修改為:int send_num=::send(clientsocket,sztext,strlen(sztext)+1,0);
不過,這與你的問題無關。
**:在vc++ 的 mfc中 函式經過多執行緒程式設計後不能執行??
本來乙個函式為
void function()
for(;;)
cvreleasecapture( &capture );
}是沒有問題的。多執行緒程式設計中由於要把函式定義成全域性型的所以就變成:
dword winapi loadvideo(lpvoid pparam)
for(;;)
cvreleasecapture( &capture );
return 1;
}然後再用createthread函式呼叫。編譯沒問題。但是 執行後就彈出了程式出錯對話方塊。如圖所示。請問是什麼原因呢?
最佳答案把這個全域性函式的功能全寫回到你的成員函式裡,然後你呼叫執行緒時將當前的this指標傳進去,再在這個全域性函式呼叫你的成員函式(通過傳入的this指標呼叫,記得將引數強制轉換回你原來的型別)
socket多執行緒通訊
程序與執行緒的區別 程序 在作業系統構成單獨執行流的單位。執行緒 在程序構成單獨執行流的單位 執行緒的建立和執行流程 include int pthread create pthread t restrict thread,const pthread attr t restrict attr,voi...
多執行緒socket通訊client
控制台下實現多執行緒socket通訊,服務端為每個請求的客戶端建立乙個執行緒,進行通訊。其實這些msdn裡都有 一.基本流程如下 定義變數 獲得winsock版本 載入winsock庫 初始化 建立套接字 設定套接字選項 關閉套接字 解除安裝winsock庫 釋放資源 二.客戶端 建立過程 下篇是服...
vc 多執行緒程式設計
mfc2.afxbeginthread函式建立和初始化cwinthread物件,啟動並返回位址。3.pthread new cwinthread pthread m bautodelete false pthread afxbeginthread startandclosethreadproc,nu...