C# 用Socket怎么得到请求客户端的IP地址??

williams_cn 2009-06-09 02:20:09
我的Server里面的监听函数是:
private void BeginListen()
{
IPAddress ServerIp = GetServerIP();
IPEndPoint iep = new IPEndPoint(ServerIp, 8000);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] byteMessage = new byte[13];
socket.Bind(iep);
while (true)
{
try
{
socket.Listen(5);
Socket newSocket = socket.Accept();
newSocket.Receive(byteMessage);
string ClientIP= Encoding.ASCII.GetString(byteMessage);
MessageBox.Show(msg);
}
catch (SocketException ex)
{
ex.ToString();
}

}

}

客户端程序怎么写??

当客户端发送请求的时候,我如何得到客户端的IP 地址>?
...全文
4729 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanhengzp 2012-07-18
  • 打赏
  • 举报
回复
你好,我最近也在写这个程序,是个三年,希望还是能有人帮助我!当我在服务器端 while (true)
{
sokConnection = socketWatch.Accept();
ltvFriend.Items.Add(sokConnection.RemoteEndPoint.ToString());
dict.Add(sokConnection.RemoteEndPoint.ToString(), sokConnection);
strAddress = sokConnection.RemoteEndPoint.ToString();
showMsg("");
showMsg("地址为" + strAddress + "的用户上线了!");
threadReceive = new Thread(ReceiveMsg);
threadReceive.IsBackground = true;
threadReceive.Start();
showMsg("");
}

在ReciveMsg方法中, while (true)

{
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//if(sokConnection.Connected)
//{
int len = sokConnection.Receive(arrMsgRec);
string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, len);
string strEndpoint = ((IPEndPoint)sokConnection.RemoteEndPoint).Port.ToString();
string finallyMsg = strEndpoint + "的用户:" + strMsgRec;
showMsg(finallyMsg);
int length = ltvFriend.Items.Count;
//showMsg(length.ToString());
for (int i = 0; i < length; i++)
{
string strClient = ltvFriend.Items[i].Text.Trim();
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(finallyMsg);
dict[strClient].Send(arrMsg);
}
// }
}

每一次服务器都无法识别客户端是谁发来的信息,简单的说就是最后一次连接的时候,那个socketConnetion,得到的ip地址就是最后一个连接过来的客户端的远程Ip地址,这样的话,服务端总是以为是这个发来的消息,怎么实现从服务端来区分客户端的IP啊!!


由于这个问题我查了很多资料,一直没有解决,希望高手相助啊!我很疑惑,而且尝试了很多方法,才在这里求助,而且看到了这个帖子的时间···还是决定了,为了知识。
pjw216 2009-06-09
  • 打赏
  • 举报
回复
当你得到newSocket后单步调试看看,你会看到newSocket的所有信息,包括客户端的IP和端口号~~
ztenv 2009-06-09
  • 打赏
  • 举报
回复 2
Socket newSocket = socket.Accept();
IPEndPoint clientipe = (IPEndPoint)newSocket.RemoteEndPoint;
Console.WriteLine("[" + clientipe.Address.ToString() + "] Connected");
dai78 2009-06-09
  • 打赏
  • 举报
回复
绑定连接的Socket中有个属性可取远程计算机IP
cppfaq 2009-06-09
  • 打赏
  • 举报
回复
http://www.csharp-examples.net/socket-send-receive/
dancingbit 2009-06-09
  • 打赏
  • 举报
回复
倒...
Socket有一个RemoteEndPoint属性...
至于客户端怎么写...
shmilqdd 2009-06-09
  • 打赏
  • 举报
回复
客户端发请求的时候把客户端IP和端口都发来不就可以了吗
比如,发来请求开头是"192.168.100.101_8888_",然后split('_')就得到了

111,086

社区成员

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

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

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