基本UDP编程(windowns)

这个也是在windowns用vs2015写的

  1. 服务器端代码
#include<WS2tcpip.h>
#include<winsock.h>
#include <stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
	WORD myVersionRequest;
	WSADATA wsaData;
	myVersionRequest = MAKEWORD(1, 1);
	int err;
	err = WSAStartup(myVersionRequest, &wsaData);//在windowns上使用socket需要先注册,以上就是注册代码
	if (!err)
	{
		printf("等待连接\n");

	}
	else
	{
		//进一步绑定套接字
		printf("嵌套字未打开!");
		return 0;
	}
	SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, 0);//创建了可识别套接字
	SOCKADDR_IN peeraddr;										       //需要绑定的参数
	SOCKADDR_IN addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//ip地址
	addr.sin_port = htons(1234);//绑定端口,端口一般比1024大,因为1-1024是常设端口
	bind(serSocket, (SOCKADDR*)&addr, sizeof(SOCKADDR));//绑定完成
	int lenth = sizeof(SOCKADDR);
	int num = 0;
	char buf[100];
	char send[100];
	num = recvfrom(serSocket, buf, 100, 0, (SOCKADDR*)&peeraddr, &lenth);
	if (num < 0) {
		printf("接收失败\n");
		exit(1);
	}
	buf[num] = '\0';
	printf("你接受来自ip地址为:%s,端口为:%d的消息:%s\n", inet_ntoa(peeraddr.sin_addr), htons(peeraddr.sin_port), buf);
	sendto(serSocket, "欢迎来到2-1003皇家赌场!\n", 50, 0, (SOCKADDR*)&peeraddr, lenth);
	while (1) {
		memset(buf, 0, 100);
		recvfrom(serSocket, buf, 101, 0, (SOCKADDR*)&peeraddr, &lenth);
		buf[num] = '\0';
		printf("你接受来自ip地址为:%s,端口为:%d的消息:%s\n", inet_ntoa(peeraddr.sin_addr), htons(peeraddr.sin_port), buf);
		gets_s(send, 100);
		sendto(serSocket, send, 50, 0, (SOCKADDR*)&peeraddr, sizeof(SOCKADDR));
		memset(send, 0, 100);
		if (!strcmp(buf, "bye")) {
			break;
		}
	}
	closesocket(serSocket);//关闭
	WSACleanup();//释放资源的操作
	return 0;
}
  1. 客户端代码
#include<WS2tcpip.h>
#include<winsock.h>
#include <stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc,char*argv[])
{
	WORD myVersionRequest;
	WSADATA wsaData;
	myVersionRequest = MAKEWORD(1, 1);
	int err;
	err = WSAStartup(myVersionRequest, &wsaData);//在windowns上使用socket需要先注册,以上就是注册代码
	if (!err)
	{
		printf("套接字打开成功\n");

	}
	else
	{
		//进一步绑定套接字
		printf("嵌套字未打开!");
		return 0;
	}
	SOCKET socketfd, num;
	char buf[100];
	SOCKADDR_IN server, peer;
	socketfd = socket(AF_INET, SOCK_DGRAM, 0);
	ZeroMemory(&server, sizeof(server));
	server.sin_family = AF_INET;
	server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	server.sin_port = htons(1234);
	char s[50];
	int len = sizeof(server);
	while (1) {
		gets_s(s, 50);
		sendto(socketfd, s, 50, 0, (SOCKADDR*)&server, sizeof(server));
		memset(s, 0, 50);
		num = recvfrom(socketfd, buf, 101, 0, (SOCKADDR*)&peer, &len);
		if (num < 0) {
			printf("消息接收失败\n");
			exit(1);
		}
		buf[num] = '\0';
		printf("服务器消息:%s\n",buf);
		if (!strcmp(buf, "bye")) {
			break;
		}
	}
	closesocket(socketfd);
	WSACleanup();
	return 0;
}
  1. 运行结果
    服务器端:在这里插入图片描述
    客户端:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/z1041259928/article/details/88054051