基于windows环境下的socket C语言代码,基于UDP协议传输
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这是基于windows环境下的socket C语言代码,基于UDP协议传输。
服务器端代码
//socket_service.cpp
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
printf("服务端:\n");
WORD wVersionRequested;
WSADATA wsaData;
sockaddr_in tcpaddr;
int iSockErr;
wVersionRequested=MAKEWORD(2,2);
if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
printf("Winsock 初始化错误!\n");//Winsock初始化错误
system("pause");
}
if(wsaData.wVersion!=wVersionRequested)
{
printf("Winsock 版本不匹配!\n");//Winsock版本不匹配
WSACleanup();
system("pause");
}
SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(5050);//服务端默认端口
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);
//tcpaddr.sin_addr.s_addr = inet_add(“127.0.0.1”);
if(bind(s,(LPSOCKADDR)&tcpaddr,sizeof(tcpaddr))==SOCKET_ERROR) //绑定socket
{
iSockErr=WSAGetLastError();
printf("%d",iSockErr);//根据不同的错误类型进行不同的处理
system("pause");
}
listen(s,5); //监听
sockaddr_in addrClient;
int len=sizeof(SOCKADDR);
char sendBuf[50];
SOCKET sockConn=accept(s,(SOCKADDR*)&addrClient,&len);
printf("Welcome %s \n",inet_ntoa(addrClient.sin_addr));
sendto(sockConn,sendBuf,strlen(sendBuf)+1,0, (SOCKADDR*)&addrClient,len);
char recvBuf[50];
while(1)
{
strcpy(recvBuf,"\0");
recvfrom(s,recvBuf,50,0,(SOCKADDR*)&addrClient,&len);
printf("%s",recvBuf);
}
closesocket(s);
WSACleanup();
return 0;
}
下面是客户端的代码:
// socket_client.cpp
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
#define DATA_BUFFER 1024 //默认缓冲区大小
int main(int argc, CHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
int temp;
wVersionRequested = MAKEWORD( 2,2); //创建word
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
printf("%d",err);
system("pause");
return 0;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
char s[100]="\0";
SOCKADDR_IN addrSrv;
char ip[16]="\0";
scanf("%s",ip);
addrSrv.sin_addr.S_un.S_addr=inet_addr(ip);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5050);
int len=sizeof(SOCKADDR);
connect(sockClient,(SOCKADDR*)&addrSrv,len);
sendto(sockClient,"你好\n",strlen("你好")+1,0 ,(SOCKADDR*)&addrSrv,len);
printf("请输入信息(退出 q):\n");
while((temp=fgetc(stdin))!='q') //用q代表退出
{
ungetc(temp,stdin);
fgets(s,100,stdin);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
sendto(sockClient,s,strlen(s)+1,0,(SOCKADDR*)&addrSrv,len);
printf("请输入信息(退出 q):\n");
}
closesocket(sockClient);
WSACleanup();
return 0;
}