客户端机器有多块网卡,SOCKET Connect服务器端时如何指定客户端的某个IP.

NemoBio 2010-01-20 08:52:56
客户端机器有多块网卡,SOCKET Connect服务器端时如何指定客户端的某个IP.程序片段如下:


int SendToLan(char *APText,int APLength)
{
struct sockaddr_in ToAddr;
int OptVal = 1;
int SendLength;
char RecvBuffer[AP_TEXT_LEN];
int j,RecvLength=0;
int EndOfRecvFlag=0;
char *String;
char ErrLog[256];

/*
Get host information.This routine finds the first host in the host DB
*/

host = gethostbyname("lzfls1");
if(host == NULL)
{
LogInfo("%%E-CLIENT:Failed to get the information of host LOCALHOST.");
return -1;
}
/*
Create a socket to establish communication background.
AF_INET: Internet style.Only this is supported now.
SOCK_STREAM: Socket provides sequenced,reliable,two-way connection based
byte streams.
IPPROTO_TCP: TCP is needed by 9672.
*/

Socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(Socket == -1)
{
memset(ErrLog,0,256);
sprintf(ErrLog,"%%E-CLIENT:Failed to create socket.errno=%d.",errno);
LogInfo(ErrLog);
return -2;
}
/*
Not necessarily needed.
SOL_SOCKET: Set the options at the socket level.
SO_REUSERADDR: Indicates the rules used in validating addresses supplied
in a bind call should allow reuse of local address.
OptVal=1: If this option is enabled,it must be set
*/
Host = *host; /* Not familiar with it */
memset((char *)&ToAddr,0,sizeof(struct sockaddr_in));
ToAddr.sin_family = AF_INET;
ToAddr.sin_port = htons(8087); /* Using port */
ToAddr.sin_addr = * ((struct in_addr *)Host.h_addr); /* Not eqal to VMS */
if(setsockopt(Socket,SOL_SOCKET,SO_REUSEADDR,(char *)&OptVal,
sizeof(int)) != 0)
{
close(Socket);
memset(ErrLog,0,256);
sprintf(ErrLog,
"%%E-CLIENT:Failed to set socket options.errno=%d.",errno);
LogInfo(ErrLog);
return -3;
}
/*
Because this is a socket based on TCP,it is OK not to use bind call
*/

if(connect(Socket,(struct sockaddr *)&ToAddr,
sizeof(struct sockaddr_in)) != 0)
{
close(Socket);
memset(ErrLog,0,256);
sprintf(ErrLog,"%%E-CLIENT:Failed to connect peer host.errno=%d",errno);
LogInfo(ErrLog);
return -4;
}

/*
We set flag to be 0 because flag can only be 0 or MSG_OOB.MSG_OOB means
out of band.since we have set socket option,so it must be 0);
*/
SendLength = send(Socket,APText,APLength,0);
if(SendLength != APLength)
{
close(Socket);
memset(ErrLog,0,256);
sprintf(ErrLog,
"%%E-CLIENT:Failed to send message to peer host.errno=%d,Len=%d",
errno,SendLength);
LogInfo(ErrLog);
return -5;
}
。。。。。。。
...全文
350 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
任意一个可以使用的IP,只要端口对都可以。
NemoBio 2010-01-20
  • 打赏
  • 举报
回复
能详细点吗?
qqzeng-ip 2010-01-20
  • 打赏
  • 举报
回复
IPAddress ipAddress = Dns.Resolve(Dns.GetHostName()).AddressList[0];

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧