基於UDP的多執行緒網路通訊程式

2021-06-13 03:58:47 字數 1649 閱讀 2819

分享一段基於udp的多執行緒網路點對點通訊程式。

檔案一:ccomm.h

#ifndef _ccomm_h_

#define _ccomm_h_

#include #include #include #include #define socklen_t int

#pragma comment(lib, "wsock32.lib")

class ccomm

;#endif // #define _ccomm_h_

檔案一:ccomm.cpp

#include "ccomm.h"

ccomm::ccomm()

#endif

}//析構函式

ccomm::~ccomm()

bool ccomm::sendmsg( char *msg, int len, char *host, short port )

else // 否則則可能是機器名

if ( !hostdata )

sockaddr_in dest; // 傳送目標位址

dest.sin_family = pf_inet;

dest.sin_addr = *(in_addr *)(hostdata->h_addr_list[0]);

dest.sin_port = htons( port );

printf("資訊已經被傳送到主機 %s 埠為 %i\n", inet_ntoa(dest.sin_addr), ntohs(dest.sin_port));

//資料傳送

sent = sendto(listensocket, msg, len, 0, (sockaddr *)&dest, sizeof(sockaddr_in));

if ( sent != len )

return true;

}void *ccomm::listenthread( void *data )

} }//位址繫結,注意在udp協議中,不需要listen,這裡函式listen只是繫結乙個埠

bool ccomm::listen( int portnum )

srv.sin_family = pf_inet;

srv.sin_addr.s_addr = htonl( inaddr_any ); // 任何位址

srv.sin_port = htons( portnum );

if ( bind( listensocket, (struct sockaddr *)&srv, sizeof(srv)) != 0 )

int threadid; // 執行緒id

dword thread;

//呼叫createthread建立執行緒

threadid = (int)createthread(null, 0, (lpthread_start_routine)(ccomm::listenthread), (void *)this, 0, &thread);

threadid = threadid ? 0 : 1; // 如果成功,則返回為0

if(threadid) // threadid如果不為0,則執行緒建立失敗

else

return true;

}

基於UDP的網路通訊程式

我們知道tcp ip協議是至今發展最為成功的協議之一,也是整個網際網路的基礎。它在傳輸層有兩個不同的協議 tcp和udp,用途都很廣泛,下面我就udp做乙個示例程式。整個例子有兩個程式組成,乙個傳送資料,另乙個程式接收資料後,完成繪圖工作。本文程式執行效果圖如下 一 傳送程式 首先建立資料傳送程式 ...

網路通訊UDP

udp 前面已經講過tcp網路通訊,然後tcp每次通訊都要進行三次握手連線,雖然傳輸的可靠性比較高,但對於一些及時性的資料的傳輸顯得太過費時,所以就有了udp這種無連線通訊,但資料容易出錯。那些函式我這裡就不講了,直接看我上乙個部落格就行,我這裡直接附例子了。udpserver.c include ...

udp網路通訊

建立套接字 傳送 接收 資料 關閉套接字 伺服器需要通過bind固定本機ip和port import socket 1.建立udp套接字 udp socket socket.socket socket.af inet,socket.sock dgram 2.傳送資料 send socket.send...