#include <winsock2.h> #include <stdio.h> #pragma comment (lib,"WS2_32.lib") BOOL InitWinsock(); void main() { SOCKET socket1; InitWinsock(); struct sockaddr_in server; struct sockaddr_in local; int len =sizeof(server); server.sin_family=AF_INET; server.sin_port=htons(30000); ///server的监听端口 server.sin_addr.s_addr=inet_addr("172.18.20.222"); ///server的地址 socket1=socket(AF_INET,SOCK_DGRAM,0); local.sin_family=AF_INET; local.sin_port=htons(20000); local.sin_addr.s_addr=INADDR_ANY; bind(socket1,(struct sockaddr*)&local,sizeof local); 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--%d--%s\n",inet_ntoa(server.sin_addr),server.sin_port,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; }
printf("rece from server:%s--%d--%s\n",inet_ntoa(server.sin_addr),server.sin_port,buffer); //////////////////////////////////////////////////////// printf("rece from server:%s--%d--%s\n",inet_ntoa(server.sin_addr),ntohs(server.sin_port),buffer);
#include <stdio.h>
#pragma comment (lib,"WS2_32.lib")
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(30000); ///监听端口
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--%d--%s\n",inet_ntoa(from.sin_addr),from.sin_port,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;
}
#include <stdio.h>
#pragma comment (lib,"WS2_32.lib")
BOOL InitWinsock();
void main()
{
SOCKET socket1; InitWinsock();
struct sockaddr_in server;
struct sockaddr_in local;
int len =sizeof(server);
server.sin_family=AF_INET;
server.sin_port=htons(30000); ///server的监听端口
server.sin_addr.s_addr=inet_addr("172.18.20.222"); ///server的地址 socket1=socket(AF_INET,SOCK_DGRAM,0);
local.sin_family=AF_INET;
local.sin_port=htons(20000);
local.sin_addr.s_addr=INADDR_ANY;
bind(socket1,(struct sockaddr*)&local,sizeof local);
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--%d--%s\n",inet_ntoa(server.sin_addr),server.sin_port,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;
}
////////////////////////////////////////////////////////
printf("rece from server:%s--%d--%s\n",inet_ntoa(server.sin_addr),ntohs(server.sin_port),buffer);
比如我在客户端绑定到20000端口,服务器端绑定到30000端口,服务器收到客户端的数据,
分析出来的端口是随机的,不是20000;同样,客户端收到服务器端的数据,分析出来的端口也是随机的,
不是30000。何解?谢谢
呵呵,你绑定端口是因为这个绑定的端口是监听信息的端口,就是说数据接受是用这个的,但是发送你固定了么~?
所以当然是随机的啊~:)
udp不像TCP一样建好链接后,发送接受都是用建立链接后的端口~:)
-----------------------------------------------------------------------------------------------------------------------------------------
CSDN小猪手:方便查看,快速回复~~速度++~~~
下载:
http://www.vickyjam.com/blog/lbs/article.asp?id=165