基于UDP Socket例子

本文提供了基于Winsock的UDP客户端和服务端程序代码示例,详细展示了如何使用socket进行初始化、数据发送与接收的过程,包括客户端输入消息并发送至服务端,以及服务端接收并响应客户端的消息。

客户端程序代码如下:

#pragma comment(lib,"ws2_32.lib")
#include<winsock2.h>
#include<stdio.h>
BOOL InitWinsock();
void main()
{
	SOCKET socket1;
	InitWinsock();
	struct sockaddr_in server;
	int len=sizeof(server);
	server.sin_family=AF_INET;
	server.sin_port=htons(1000);	//Server的监听端口为1000
	server.sin_addr.s_addr=inet_addr("192.168.0.199");
	socket1=socket(AF_INET,SOCK_DGRAM,0);
	while(1)
	{
		char buffer[1024]="\0";
		printf("input message\n");
		scanf("%s",buffer);
		if(strcmp(buffer,"bye")==0)
			break;
		if(sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
		{
			if(recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr *)&server,&len)!=SOCKET_ERROR)
				printf("rece from server:%s\n",buffer);
		}
	}
	closesocket(socket1);
}

BOOL InitWinsock()
{
	int Error;
	WORD VersionRequested;
	WSADATA WsaData;
	VersionRequested=MAKEWORD(2,2);
	Error=WSAStartup(VersionRequested,&WsaData);
	if(Error!=0)
	{
		return FALSE;
	}
	else
	{
		if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
		{
			WSACleanup();
			return FALSE;
		}
	}
	return TRUE;
}

 //htons()的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)

 

服务端程序代码:

#pragma comment(lib,"ws2_32.lib")
#include<winsock2.h>
#include<stdio.h>
BOOL InitWinsock();
void main()
{
	SOCKET socket1;
	InitWinsock();
	struct sockaddr_in local;
	struct sockaddr_in from;
	int fromlen=sizeof(from);
	local.sin_family=AF_INET;
	local.sin_port=htons(1000);  //监听端口
	local.sin_addr.s_addr=INADDR_ANY;  //本机
	socket1=socket(AF_INET,SOCK_DGRAM,0);
	bind(socket1,(struct sockaddr*)&local,sizeof(local));
	while(1)
	{
		char buffer[1024]="\0";
		printf("waiting for message from others-------------");
		if(recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
		{
			printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
              //给Client发信息 sendto(socket1,strcat(buffer,"hello"),sizeof(strcat(buffer,"hello")),0,(struct sockaddr*)&from,fromlen); printf("%s",buffer); } Sleep(500); } closesocket(socket1); } BOOL InitWinsock() { int Error; WORD VersionRequested; WSADATA WsaData; VersionRequested=MAKEWORD(2,2); Error=WSAStartup(VersionRequested,&WsaData); if(Error!=0) { return FALSE; } else { if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2) { WSACleanup(); return FALSE; } } return TRUE; }

 

转载于:https://www.cnblogs.com/shanmao/archive/2012/11/20/2779556.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值