有一台服务器不停向客户端发送消息,
当客户端接受到消息后,要给服务器作出回应,我需要怎么做啊?
是不是要获取服务器的IP和端口号?然后发送消息.
但是我要怎么获取服务器的IP和端口号?
希望知道的朋友多多指教,我刚刚接触网络编程,很多东西不明白,
希望你们细点告诉我,谢谢!
当客户端接受到消息后,要给服务器作出回应,我需要怎么做啊?
是不是要获取服务器的IP和端口号?然后发送消息.
但是我要怎么获取服务器的IP和端口号?
希望知道的朋友多多指教,我刚刚接触网络编程,很多东西不明白,
希望你们细点告诉我,谢谢!
socket的接收函数有这些参数用于带回ip和port的,看看MSDN。
GetPeerName Call this member function to get the address of the peer socket to which this socket is connected.
/*-------------------------------------------------
tcpsrv.cpp 服务端主程序
code:Huai_Huai 2005.9.13
--------------------------------------------------*/
#include <winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int Err;
wVersionRequested=MAKEWORD(2,2);
Err=WSAStartup(wVersionRequested,&wsaData);
if (Err!=0)
{
return;
MessageBox(0,TEXT("1"),NULL,0);
}
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
MessageBox(0,TEXT("2"),NULL,0);
return;
} SOCKET socksrv=socket(PF_INET,SOCK_STREAM,0);
if(socksrv==INVALID_SOCKET)
{
WSACleanup();
MessageBox(0,TEXT("3"),NULL,0);
return;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); bind(socksrv,(sockaddr *)&addrSrv,sizeof(SOCKADDR));
listen(socksrv,5); SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockconn=accept(socksrv,(sockaddr *)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to http://www.520160.com",
inet_ntoa(addrClient.sin_addr));
send(sockconn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockconn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockconn);
}
WSACleanup();
}/*-------------------------------------------------
tcpclient.cpp 客户端主程序
code:Huai_Huai 2005.9.13
--------------------------------------------------*/
#include <winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int Err; wVersionRequested=MAKEWORD(2,2);
Err=WSAStartup(wVersionRequested,&wsaData);
if (Err!=0)
return;
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.88");
addrSrv.sin_port=htons(6000);
connect(sockClient,(sockaddr *)&addrSrv,sizeof(SOCKADDR)); char sendBuf[100];
sprintf(sendBuf,"I love jie");
send(sockClient,sendBuf,100,0); char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("%s",recvBuf); closesocket(sockClient);
WSACleanup();
}
所谓服务端就是公布IP地址和端口的一台机器,等待着为别的clinet提供服务
如果某clinet需要服务
就去连接该服务端的对应端口,所以这些东西是你作为客户端或者客户端程序编写者应该知道的
楼上所说的获得方法
是指在程序中动态获得的方法
如getpeername需要发生在连接建立以后