UDP 使用 connect

来源:互联网 发布:c语言的库函数大全 编辑:程序博客网 时间:2024/05/19 07:24


Client

#include<stdio.h>#include<stdlib.h>#include<string.h>#include <Windows.h>#pragma comment(lib, "ws2_32.lib")#define MAXLINE 50typedef struct sockaddr SA;int main(){int sock;SOCKADDR_IN servaddr;char buf[MAXLINE] = "hello Server";WSAData wsaData;WSAStartup(MAKEWORD(2,2), &wsaData);if((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){printf("fail to socket\n");exit(-1);}memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family= AF_INET;servaddr.sin_addr.s_addr= inet_addr("127.0.0.1");servaddr.sin_port= htons(8888);if(connect(sock, (SA *)&servaddr,sizeof(servaddr)) < 0){printf("fail to connect\n");exit(-1);}//sendto(sockfd, buf, sizeof(buf), 0, (SA *)&servaddr, sizeof(servaddr));send(sock, buf, sizeof(buf), 0);// 不需要sendtomemset(buf, 0 ,sizeof(buf));//recvfrom(sockfd, buf, MAXLINE, 0, NULL, NULL);recv(sock, buf, MAXLINE, 0);// 不需要recvfrom  printf("recv from server:%s\n",buf);WSACleanup();Sleep(100000);return 0;}


Server

#include<stdio.h>#include<stdlib.h>#include <Windows.h>#include <string.h>#pragma comment(lib, "ws2_32.lib")#define MAXLINE 50typedef struct sockaddr SA;int main(int argc,char **argv){SOCKET sock;int peerlen;SOCKADDR_IN myaddr, peeraddr;char buf[MAXLINE];WSAData wsaData;WSAStartup(MAKEWORD(2,2), &wsaData);if((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) <0){printf("fail to socket\n");exit(-1);}memset(&myaddr, 0, sizeof(myaddr));myaddr.sin_family = AF_INET;myaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");myaddr.sin_port = htons(8888);if(bind(sock, (SA *)&myaddr, sizeof(SOCKADDR)) < 0){printf("fail to bind,GetLastError = %d\n", GetLastError());exit(-1);}while(1){peerlen=sizeof(peeraddr);if (recvfrom(sock, buf, sizeof(buf), 0, (SA *)&peeraddr, &peerlen) > 0){printf("connection from %s, port %d\n%s\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port), buf);sendto(sock, buf, sizeof(buf), 0, (SA *)&peeraddr, sizeof(peeraddr));}}WSACleanup();return 0;}


Server:


Client:


0 0