跨平台UDP程式設計

2021-06-23 01:18:09 字數 2423 閱讀 4705

跟tcp一樣,網上這類的例子太多了,我這裡綜合了一下,寫成乙個通用型的,linux下跟windows下都能用。

如果是查資料看到這裡,我再重講一遍udp,如果講得不好,請見諒。

udp跟tcp相比,少了乙個建立連線的過程,所以在server服務中,只需socket,返回乙個socket控制代碼,然後bind繫結本機ip(一般是本機),後面就是收發資料了。還有需要明白乙個概念,由於不像tcp一樣有連線,這裡udp其實就沒有服務端跟客戶端的概念了,這裡為了方便,所以就叫做服務端跟客戶端。

在客戶端中,就只需要socket返回乙個控制代碼就可以了,拿這個控制代碼,就可以跟服務端通訊了。

下面是一段**:

把需要用到的標頭檔案放到乙個檔案中(myudp.h),養成好習慣

#pragma once

#include #include using namespace std;

#ifndef windows //預先定義巨集windows,在windows vs下專案右鍵,屬性裡面新增

#include#include#include#include#include#include#include//close()

#include//struct sockaddr_in

#include//inet_ntoa

#else

#include #include #pragma comment(lib, "ws2_32.lib")

#endif

server服務端:

1.初始化 //windows下必要,linux下沒有

2.socket //注意第二個引數是sock_dgram

3.bind //繫結本機監聽埠

4.sendto和recvform //收發資料

#include "udpserver.h"

#ifndef windows

int m_sock; //linux下套接字型別

#else

socket m_sock; //windows下套接字型別

#endif

int init_socket(const char *address, int port)

sockaddr_in myserveraddr;

myserveraddr.sin_family = af_inet;

myserveraddr.sin_port = htons(port);

= inet_addr(address);

myserveraddr.sin_addr.s_addr = inet_addr(inaddr_any);

if (bind(m_sock, (sockaddr*)&myserveraddr, sizeof(myserveraddr)))

return 0;

}void run()

; sockaddr_in myserveraddr;

#ifndef windows

socklen_t len = sizeof(myserveraddr);

#else

int len = sizeof(myserveraddr);

#endif

while (1) }

int main()

client客戶端:

1.初始化 //windows下必要,linux沒有

2.socket

3.收發資料

#include "udpclient.h"

#ifndef windows

int m_sock; //linux下套接字型別

#else

socket m_sock; //windows下套接字型別

#endif

sockaddr_in myclientaddr;

int init_socket(const char *address, int port)

myclientaddr.sin_family = af_inet;

myclientaddr.sin_port = htons(port);

= inet_addr(address);

myclientaddr.sin_addr.s_addr = inet_addr(inaddr_any);

return 0;

}void sendmsg(const char *msg, int length);

//if (recvfrom(m_sock, buf, sizeof(buf), 0, (sockaddr*)&myclientaddr, &len) < 0)

//perror("recvfrom failed");

}int main()

這樣乙個udp客戶端跟服務端就建立起來了。。

程式設計原理 跨平台

程式設計原理 所謂的跨平台是指程式可以不經處理就在不同平台上執行。而 平台 一詞有很多定義,在本 書中是指作業系統與硬體 處理器 的組合。用編譯型語言寫出來的程式,必須先編譯成機器碼。而機器碼是與底下的平台息息相關的,所 以 用編譯型語言寫出來的程式,無法跨平台 也就是說,無法在不同的平台上執行 解...

跨平台UNICODE程式設計總結

這段時間在架構整個伺服器,雖然前段時間受到了5.12汶川8.0級大 的影響 深切悼念在此次大 中遇難的同胞們 但是,我的工作還是在不斷地向前推進著。為了讓我們的伺服器能夠跨平台 主要是windows與linux 且能支援世界上的各種語言,我寫了乙個跨平台的且支援unicode的庫。其實,我在之前也有...

跨平台 Windows Linux 網路程式設計

一 網路程式設計在windows下和linux下的區別 專案windows linux 主要標頭檔案 winsock.h winsock2.h sys socket.h fcntl.h errno.h等 鏈結庫ws2 32.dll lib 連線是使用引數 lstdc 執行時需要libstdc so....