[英]Sending and recieving with TCP, using a socket more than once (C#)
编辑:原来我两次使用相同的端口。 不过,任何人都可以将其留在这里,像htis这样的线程过去曾帮助过我。
我目前正在一个项目中,在服务器和客户端上都有一个高分列表,这两个文件夹同步数据,并保存为XML。 我的所有工作都差不多,但是我不断收到异常“ System.Net.Sockets.SocketException:每个套接字地址只有一种用法”,我不知道该如何摆脱它。 对我来说,代码看起来不错,因为我在Update
前关闭了TcpClient
,然后再转到Recieve
。 谁能发现我所缺少的内容,或者向我解释我做错了什么? 我是新手,所以解释中的一些实际代码会很有帮助!
static void Main(string[] args)
{
Update();
Recieve();
}
服务器发送给客户端:
public static void Update()
{
List<string> stringList = new List<string>();
XmlDocument highScore = new XmlDocument();
highScore.Load("hs.xml");
for (int i = 0; i < 5; i++)
{
int placering = i + 1;
stringList.Add(highScore.SelectSingleNode("highScores/score" + (placering)).InnerText);
}
string toSend = stringList[0] + stringList[1] + stringList[2] + stringList[3] + stringList[4];
string adress = "127.0.0.1";
int port = 82;
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(adress, port);
NetworkStream stream = tcpClient.GetStream();
Byte[] bSend = Encoding.ASCII.GetBytes(toSend);
NetworkStream tcpStream = tcpClient.GetStream();
tcpStream.Write(bSend, 0, bSend.Length);
tcpClient.Close();
}
服务器从客户端接收:
public static void Recieve()
{
//skapa ett TcpListener objekt
IPAddress myIp = IPAddress.Parse("127.0.0.1");
TcpListener tcpListener;
int port = 82;
tcpListener = new TcpListener(myIp, port);
tcpListener.Start(); //Throws the exception
Socket socket = tcpListener.AcceptSocket();
int messageSize;
Byte[] bMessage = new Byte[256];
while (true)
{
try
{
messageSize = socket.Receive(bMessage);
break;
}
catch { }
}
//konvertera till string och skriv ut
string message = "";
for (int i = 0; i < messageSize; i++)
{
message += Convert.ToChar(bMessage[i]);
}
for (int i = 0; i < 5; i++)
{
SaveScore(int.Parse(message[i].ToString()), i + 1);
}
socket.Close();
}
两种方法都在与游戏分开的解决方案中的同一Program.cs
中。
您还应该在Receive方法中停止TcpListener,是否有可能在上一次运行应用程序时仍处于打开状态?
事实证明,这是那些简单的事情之一,在基本上重写了方法之后,我发现从其他项目中复制粘贴后,发送和接收的方法都使用了端口82。是的。 感谢那些试图帮助我的人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.