WinSocket的客户端和服务端无法连接,请指点,附程序!!!
各位高手,我有以下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();
}
//--------------------------------------------------------------------------
不知道是什么原因,请高手指点!!!!
//主机服务器端代码:-------------------------------------------------------
////////////////////////////////////////////
//基于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();
}
//--------------------------------------------------------------------------
...全文
相关推荐
网络编程作业(winsocket实现聊天程序)
研究生网络编程作业,所有的结构与代码均由自己实现,适合用于上交老师布置的聊天程序编写作业
毕业设计项目:QT开发基于WinSocket的FTP文件传输系统(含客户端和服务端).zip
用c++/qt写的项目,项目真实可靠,源码都经测试过,能跑通,请放心下载使用。
winsocket编程实现简单 server端和client端
本程序通过在VC++6.0下用winsocket实现了数据通信,功能类似QQ应用程序,同时在服务端可接受来自客户端上传的图像的资源。
WinSocket 版智能客户端及非常好的 Winsocket 代码
WinSocket 版智能客户端及非常好的 Winsocket 学习源代码
winsocket写的udp发送日志到服务端的客户端和服务端代码
使用此方法,好处是不会阻塞,当日志量比较大的时候能够快速反应。坏处就是udp发送大于最小传输单元的数据,或把不相关的数据连续密集发送,很可能造成数据错乱丢失。


网络编程
