【socket编程】一个简单的基于UDP的客户/服务端例子(vs2008)
时间:2011-01-07 来源:蔡諝
----------------------------------------------------------------------------
************************udp_client.cpp************************
----------------------------------------------------------------------------
//使用方法举例:udp_client 127.0.0.1 8000
#include <stdio.h>
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")//加载依赖库(方法二:项目属性-链接器-输入-附加依赖项:填入ws2_32.lib)
SOCKET udp_socket;
sockaddr_in udpAddr;
const int BufLen=1024;
char SendBuf[BufLen];
int main(int argc,char** argv)
{
WSADATA wsaData;
long int Addr;
int Port;
if(argc!=3){printf("Usage:%s [<IP> <Port>]\n",argv[0]);return 0;}
Addr=inet_addr(argv[1]);
Port=atoi(argv[2]);
WSAStartup(MAKEWORD(2,2), &wsaData);//根据版本通知操作系统,启用SOCKET的DLL库,必须的
udp_socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);//创建socket
printf("Running in client mode...\n");
udpAddr.sin_family=AF_INET;
udpAddr.sin_port=htons(Port);
udpAddr.sin_addr.s_addr=Addr;
while(1)//循环发送
{
gets_s(SendBuf,BufLen);
sendto(udp_socket,SendBuf,BufLen,0,(sockaddr*)&udpAddr,sizeof(udpAddr));//往指定IP的指定端口发送数据
}
closesocket(udp_socket);//关闭socket
return 1;
}
----------------------------------------------------------------------------
***********************udp_service.cpp***********************
----------------------------------------------------------------------------
#include <stdio.h>
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
SOCKET udpSocket=INVALID_SOCKET;
sockaddr_in udpAddr;
const int BufLen=1024;
char RecvBuf[BufLen];
int main()
{
WSADATA wsaData;
int Port=8000;//端口可自己改
WSAStartup(MAKEWORD(2,2), &wsaData);
udpSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
udpAddr.sin_family=AF_INET;
udpAddr.sin_port=htons(Port);
printf("Running in service mode...\n");
bind(udpSocket,(SOCKADDR*)&udpAddr,sizeof(udpAddr));//绑定端口
int size=sizeof(udpAddr);
while(1)//循环接收
{
if(udpSocket==INVALID_SOCKET){
Sleep(1000);//等待,处理端口信息留出时间
continue;//跳到下一次while,而不是下一行语句
}
recvfrom(udpSocket,RecvBuf,BufLen,0,(SOCKADDR*)&udpAddr,&size);//接收信息
printf("Received:%s\n",RecvBuf);
}
closesocket(udpSocket);
return 1;
}