我创建了一个与LAN中的其他计算机连接的类。当我引入方法连接第一次时一切正常,但在工作类之后变量会丢失对该对象的引用。
但是,如果我尝试再次创建此对象并引发方法连接我有一个错误,即"Only one using each socket adress(protocol / network address / port) is permitted"
这个错误是我尝试做的时候
partner.Connect(partnerIPEndPoint);
。
我班上有什么不好的?如果有人能帮助我,我将不胜感激。 提前谢谢。
这是我的班级:
using System;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
namespace AudioNetwork
{
class ConnectToServer : IDisposable
{
public int BeepAmonut { get; set; }
public int Speed { get; set; }
public IPAddress MyIPAddress { get; set; }
public IPAddress PartnerIPAddress { get; set; }
private NetworkStream stream;
private TcpClient partner;
public void Connect()
{
IPEndPoint myIPEndPoint = new IPEndPoint(MyIPAddress, 800);
IPEndPoint partnerIPEndPoint = new IPEndPoint(PartnerIPAddress, 800);
partner = new TcpClient(myIPEndPoint);
partner.Connect(partnerIPEndPoint);
stream = partner.GetStream();
Messanger(stream);
}
protected virtual void Messanger(NetworkStream myStream)
{
byte[] data = { 2, 1 };
myStream.Write(data, 0, data.Length);
Play(2000);
}
public void Play(int time)
{
Stopwatch sw = new Stopwatch();
sw.Start();
while (sw.ElapsedMilliseconds <= 2100)
{
if (sw.ElapsedMilliseconds >= time)
{
break;
}
}
}
public void Dispose()
{
GC.SuppressFinalize(this);
stream.Dispose();
stream.Close();
partner.Client.Dispose();
partner.Close();
}
}
class ConnectToClient : ConnectToServer
{
protected override void Messanger(NetworkStream myStream)
{
byte[] data = new byte[256];
int bytes = myStream.Read(data, 0, data.Length);
if (data[0] == 2)
{
Play(1980);
}
}
}
}
答案 0 :(得分:1)
您将硬编码端口分配给本地端点,并且不要将其关闭。
Dispose
或steam
上致电partner
- 我看不到您的Dispose
函数在任何地方被调用了< / LI>
解决方案是让操作系统为本地套接字分配一个自动端口号。那样:
在代码中,这将是简单的:
partner = new TcpClient();
摆脱所有MyIPAddress
的东西。