【发布时间】:2015-05-24 02:18:42
【问题描述】:
我有一个服务器-客户端套接字代码,当服务器和客户端在同一个网络上打开时它工作正常,但如果我尝试在不同的网络上运行它们,它们就无法识别彼此。 可能是什么问题?
服务器:
public static TcpListener listen;
static void Main(string[] args)
{
Console.Title = "Server";
listen = new TcpListener(8080);
listen.Start();
Console.WriteLine("Wait For Connect");
Socket s = listen.AcceptSocket();
Console.WriteLine("Client Has Been Connected");
read r = new read(s);
Thread t = new Thread(new ThreadStart(r.Reading));
t.Start();
NetworkStream st = new NetworkStream(s);
StreamWriter sw = new StreamWriter(st);
sw.AutoFlush = true;
string massege;
while (true)
{
massege = "server" + ":" + Console.ReadLine();
sw.WriteLine(massege);
}
}
class read
{
private StreamReader sr;
public read(Socket s)
{
Stream a = new NetworkStream(s);
this.sr = new StreamReader(a);
}
public void Reading()
{
while (true)
{
try
{
Console.WriteLine(sr.ReadLine());
}
catch
{
Console.WriteLine("Client Has Disconnected");
// Console.ReadKey();
Socket s = listen.AcceptSocket();
Console.WriteLine("Client Has Been Connected");
}
}
}
}
}
客户:
static void Main(string[] args)
{
Console.Title = "Client";
bool connect = false;
while (!connect)
{
try
{
TcpClient t = new TcpClient();
t.Connect("192.168.43.36", 8080);
Console.WriteLine("Connect!");
connect = true;
NetworkStream ns = t.GetStream();
read r = new read(t);
Thread tr = new Thread(new ThreadStart(r.startread));
tr.Start();
StreamWriter sw = new StreamWriter(ns);
sw.AutoFlush = true;
string massege;
while (true)
{
massege = "client" + ":" + Console.ReadLine();
sw.WriteLine(massege);
}
}
catch
{
Console.WriteLine("Connection Faild!");
connect = false;
}
}
}
class read
{
StreamReader sr;
public read(TcpClient t)
{
Stream s = t.GetStream();
this.sr = new StreamReader(s);
}
public void startread()
{
while (true)
{
try
{
string s = sr.ReadLine();
Console.WriteLine(s);
}
catch
{
Console.WriteLine("Server Error");
Console.Read();
}
}
}
}
}
感谢您的帮助。
【问题讨论】:
-
最明显的是防火墙。
-
你必须使用wireshark来查看网络上发生了什么。
-
使用不同的网络,您确实是指不同的子网吧?
标签: c# .net sockets networking network-programming