网络编程之路---6

来源:互联网 发布:c 程序员招聘要求 编辑:程序博客网 时间:2024/06/11 11:21

int sendto{SOCKET s, const char* buf, int len, int flags, const struct sockaddr* to, int tolen}

指定一个socket句柄 发送缓冲区 发送缓冲区长度 函数调用方式 接收数据的目标地址 指定地址长度

客户端:

#include <WinSock2.h>#include <stdio.h>#pragma comment(lib, "WS2_32.lib")//udp只需知道服务器的socketint main(int argc, char *argv[]){WSADATA wsaData;WSAStartup(MAKEWORD(2,2),&wsaData); //Windows socket apiSOCKET SendSocket;SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);int Port = 27051;char SendBuf[1054];int bufLen = 1054;SOCKADDR_IN RecvAddr; //服务器地址RecvAddr.sin_family = AF_INET;RecvAddr.sin_port = htons(Port);RecvAddr.sin_addr.S_un.S_addr = inet_addr("222.18.167.206");printf("sending a data to server\n");sendto(SendSocket, SendBuf, bufLen, 0, (SOCKADDR*)&RecvAddr, sizeof(RecvAddr));printf("Finishing sending data\n");closesocket(SendSocket);printf("exiting\n");WSACleanup();//socket句柄 传输数据的缓冲区 缓冲区长度 调用函数的方式 接收数据的目标地址 地址长度return 0;}



int recvfrom(SOCKET s, char* buf, int len, int flags, struct sockaddr* from, int *fromlen);

socket句柄 要接收数据的缓冲区 要接收数据的长度 调用函数的方式 发送数据的地址 发送数据地址的长度

服务器:

/*#include "stdafx.h"*/#include <WinSock2.h>#include <stdio.h>#pragma comment(lib, "WS2_32.lib")int main(int argc, char* argv[]){WSADATA wsaData;int resValue;WSAStartup(MAKEWORD(2,2), &wsaData);SOCKET RecvSocket;RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);int Port = 27051;char buf[1024];int bufLen = 1024;SOCKADDR_IN recvAddr; //服务端的地址recvAddr.sin_family = AF_INET;recvAddr.sin_port = htons(Port);recvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);resValue = bind(RecvSocket, (const SOCKADDR*)&recvAddr, sizeof(recvAddr));if (resValue == SOCKET_ERROR){printf("bind failed...\n");return -1;}SOCKADDR_IN sendAddr;int sendLen = sizeof(sendAddr);printf("receiving data...\n");recvfrom(RecvSocket, buf, bufLen, 0, (SOCKADDR*)&sendAddr, &sendLen);printf("finished receiving...\n");closesocket(RecvSocket);printf("exiting");WSACleanup();return 0;}


0 0