服务器端
static void AcceptResults(IAsyncResult ar)
{
Socket Listen = (Socket)ar.AsyncState;
if (连接数 < 最大连接数)
{
Socket s = Listen.EndAccept(ar);
...
}
else
{
Trace.WriteLine("Refuse");
return;
}
}客户端
public void Connect()
{
ConnectSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
try
{
ConnectSocket.Connect(ServerPoint);
if (SI.ConnectSocket.Connected)
{
SI.ReceiveThread = new Thread(new ThreadStart(SI.Receive));
SI.ReceiveThread.Start(); GblDeclare.AddMsg("Connected");
}
}
catch (Exception ex)
{
GblDeclare.AddMsg(ex.Message.ToString());
Trace.WriteLine(ex.Message.ToString());
}
}服务器端明明显示Refuse,但是客户端还是显示Connected。
问题一:到底该如何拒绝客户端连接,而客户端又能立即知道自己被拒绝?
问题二:如何在服务器端知道等待连接的客户机IP?
static void AcceptResults(IAsyncResult ar)
{
Socket Listen = (Socket)ar.AsyncState;
if (连接数 < 最大连接数)
{
Socket s = Listen.EndAccept(ar);
...
}
else
{
Trace.WriteLine("Refuse");
return;
}
}客户端
public void Connect()
{
ConnectSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
try
{
ConnectSocket.Connect(ServerPoint);
if (SI.ConnectSocket.Connected)
{
SI.ReceiveThread = new Thread(new ThreadStart(SI.Receive));
SI.ReceiveThread.Start(); GblDeclare.AddMsg("Connected");
}
}
catch (Exception ex)
{
GblDeclare.AddMsg(ex.Message.ToString());
Trace.WriteLine(ex.Message.ToString());
}
}服务器端明明显示Refuse,但是客户端还是显示Connected。
问题一:到底该如何拒绝客户端连接,而客户端又能立即知道自己被拒绝?
问题二:如何在服务器端知道等待连接的客户机IP?
解决方案 »
- 请问哪位有海运货代系统源码可卖的?
- 怎样通过CheckBox实现对表里列显示的筛选....
- 多线程问题
- 高难度,高分,解决C#.net调用ice的问题
- 做过Word二次开发的进来。Word.Application 如何在光标处插入一段文字?
- mdi子窗口打开后,被控件挡住了,无法看见.快帮忙啦
- 怎样从*.IMG文件中读出图片,并保存到指定目录中?
- 哪里能下栽C#Builder吗?多谢
- c#dataGridView中双击行,赋值行数据到弹出窗的,textbox和combox中
- string[]在哪里继承的IEnumerable<T>?
- c#有没有自己的类库?
- 长沙的朋友看过来! 公司招 C#,asp.net 程序员。
----------
Socket Listen = (Socket)ar.AsyncState;
Socket s = Listen.EndAccept(ar); if (连接数 < 最大连接数)
{
...
}
else
{
Trace.WriteLine("Refuse");
s.close();//直接关闭对方连接
return;
}问题二:如何在服务器端知道等待连接的客户机IP?
----
s.Connect(lep);// Using the RemoteEndPoint property.
Console.WriteLine("I am connected to " + IPAddress.Parse(((IPEndPoint)s.RemoteEndPoint).Address.ToString()) +
"on port number " + ((IPEndPoint)s.RemoteEndPoint).Port.ToString());// Using the LocalEndPoint property.
Console.WriteLine("My local IpAddress is :" + IPAddress.Parse(((IPEndPoint)s.LocalEndPoint).Address.ToString()) +
"I am connected on port number " + ((IPEndPoint)s.LocalEndPoint).Port.ToString());
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000); Socket s = new Socket(lep.Address.AddressFamily,
SocketType.Stream,
ProtocolType.Tcp);
try{
s.Bind(lep);
s.Listen(1000);//最大连接数为1000 while(true){
allDone.Reset(); Console.WriteLine("Waiting for a connection...");
s.BeginAccept(new AsyncCallback(Async_Send_Receive.Listen_Callback), s); allDone.WaitOne();
}
}
catch (Exception e){
Console.WriteLine(e.ToString());
}
Socket s = Listen.EndAccept(ar);
当然可以拿到很多资料。但我是想知道是否可以从IAsyncResult里获取待连接的客户机资料
您好像理解错我的意思了,我是想知道如何拒绝异步连接的客户机,不是如何连接。