int sendto( SOCKET s, //用來發送數據的套接字 const char FAR *buf, //指向發送數據的緩衝區 int len, //要發送數據長度 int flags, //通常指定0 const struct sockaddr *to, //指向一個包含目標地址和端口號的sockaddr_in結構 int toLen //結構大小 ); int recvfrom(SOCKET s, char *FAR buf, int len, int flags, struct sockaddr FAR *from, int FAR* fromLen)
#include <iostream> #include <stdio.h> #include "InitSock.h" using namespace std; int main(void) { CInitSock initSock; //建立套接字 SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) { cout << "Failed socke()" << endl; return 0; } sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(4567); addr.sin_addr.S_un.S_addr = INADDR_ANY; //綁定套接字到一個本地地址 if (bind(s, (LPSOCKADDR)&addr, sizeof(addr)) == SOCKET_ERROR) { cout << "Failed bind()" << endl; return 0; } //接收數據 char buf[1024]; sockaddr_in clientAddr; int nLen = sizeof(addr); while (TRUE) { int nRecv = recvfrom(s, buf, 1024, 0, (sockaddr*)&clientAddr, &nLen); if (nRecv > 0) { buf[nRecv] = '\0'; cout << "接收到數據" << inet_ntoa(clientAddr.sin_addr) << ": " << buf << endl; } } //關閉套接字 closesocket(s); return 0; }
#include <iostream> #include <stdio.h> #include "InitSock.h" using namespace std; int main(void) { CInitSock initSock; //建立套接字 SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) { cout << "Failed socke()" << endl; return 0; } //建立套接字以後若是首先sendto能夠不綁定 //若首先recvfrom則須要綁定 //填寫遠程地址信息 sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(4567); addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //發送數據 char szText[] = "UDP Server Demo\r\n"; sendto(s, szText, strlen(szText), 0, (sockaddr*)&addr, sizeof(addr)); closesocket(s); cout << "數據已發送" << endl; getchar(); return 0; }