Windows下C语言的Socket编程例子(TCP和UDP)

本文详细介绍了使用UDP协议实现客户端和服务端的通信过程,包括初始化Winsock、创建套接字、设置本地和远程地址、接收和发送数据包等关键步骤。

http://www.cnblogs.com/churi/archive/2013/02/27/2935427.html


UDP Server

#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-------------\n");
		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);
			////给cilent发信息
			sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);


		}
		Sleep(500);
	}


	closesocket(socket1);




}


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




UDP Client

#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的监听端口
	server.sin_addr.s_addr=inet_addr("127.0.0.1"); ///server的地址 

	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); //启动WinSock2
	if(Error!=0)
	{
		return FALSE;
	}
	else
	{
		if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
		{
			WSACleanup();
			return FALSE;
		}
		
	}
	return TRUE;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值