分享一段基於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...