vc 多執行緒程式設計 SOCKET通訊

2021-08-24 20:04:53 字數 1846 閱讀 5625

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...