WinSocket的客户端和服务端无法连接,请指点,附程序!!!

lucksunok lucksunok 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位高手,我有以下VC中的UDP,Socket代码,运行后两者不能通信,收不到信息,
不知道是什么原因,请高手指点!!!!

//主机服务器端代码:-------------------------------------------------------
////////////////////////////////////////////
//基于UDP连接的服务器端SOCKET程序//
////////////////////////////////////////////

#include <stdio.h>
#include <WINSOCK2.H>
//#include <windows.h>
//#include <iostream.h>
//#include <string.h>
#pragma comment(lib, "Ws2_32.lib")

void main()
{
//初始准备
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );//构造WORD结构的版号,makeword(hibyte,lobyte);

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
printf("Can't load the Winsock dll!\n");
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
printf("not the right sock dll version!\n");
WSACleanup();
return;
}
//建立套接字
SOCKET sktSvr=socket(AF_INET,SOCK_DGRAM,0);
//设定主机地址结构
SOCKADDR_IN addrSvr;
addrSvr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//htonl(ADDR_ANY);
addrSvr.sin_family=AF_INET;
addrSvr.sin_port=htons(6000);
//绑定本机套接字,本地地址,地址长度;
bind(sktSvr,(SOCKADDR*)&addrSvr,sizeof(SOCKADDR));

SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);

char receiveBuffer[100]="";
char sendBuffer[100]="";
char tempBuffer[100]="";

while(1)
{
recvfrom(sktSvr,receiveBuffer,100,0,(SOCKADDR*)&addrClient,&len);
if ('q'==receiveBuffer[0])
{
sendto(sktSvr,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len);
printf("chat end\n");
break;
}
sprintf(tempBuffer,"%s say: %s\n",inet_ntoa(addrClient.sin_addr),receiveBuffer);
printf("%s\n",tempBuffer);
printf("please input data:\n");
gets(sendBuffer);
sendto(sktSvr,sendBuffer,strlen(sendBuffer)+1,0,(SOCKADDR*)&addrClient,len);
}

closesocket(sktSvr);
WSACleanup();

}//--------------------------------------------------------------------------
//客户端代码如下:----------------------------------------------------------
////////////////////////////////////////////
//基于UDP连接的客户端SOCKET程序//
////////////////////////////////////////////

#include <stdio.h>
#include <WINSOCK2.H>
#include <iostream.h>
#pragma comment(lib, "Ws2_32.lib")

void main()
{
//初始准备
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );//构造WORD结构的版号,makeword(hibyte,lobyte);

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
cout<<"Can't load the Winsock dll!"<<endl;
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
cout<<"not the right sock dll version!"<<endl;
WSACleanup();
return;
}
//建立套接字
SOCKET sktClient=socket(AF_INET,SOCK_DGRAM,0);
//设定主机地址结构
SOCKADDR_IN addrSvr;
addrSvr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSvr.sin_family=AF_INET;
addrSvr.sin_port=htons(6000);

// SOCKADDR_IN addrSr;
int len=sizeof(SOCKADDR);

char receiveBuffer[100]="";
char sendBuffer[100]="";
char tempBuffer[100]="";

while(1)
{
printf("please input data:\n");
gets(sendBuffer);
sendto(sktClient,sendBuffer,strlen(sendBuffer)+1,0,(SOCKADDR*)&addrSvr,len);
recvfrom(sktClient,receiveBuffer,100,0,(SOCKADDR*)&addrSvr,&len);
if ('q'==receiveBuffer[0])
{
sendto(sktClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSvr,len);
printf("chat is end!\n");
break;
}
sprintf(tempBuffer,"%s says: %s",inet_ntoa(addrSvr.sin_addr),receiveBuffer);
printf("%s\n",tempBuffer);

}

closesocket(sktClient);
WSACleanup();
}
//--------------------------------------------------------------------------
...全文
评论 6
收藏 已收藏
分享
返回顶部
lucksunok
网络编程 18,356 成员 64,161 内容