客户的TcpClient/TCPSERVER /监听器,服务器停止读取或客户端停止30秒后
class Client
{
public TcpClient client;
public StreamWriter server;
public ServerPlayer serverPlayer;
public Player player;
public void Connect(Player p)
{
player = p;
serverPlayer = new ServerPlayer();
client = new TcpClient(AddressFamily.InterNetwork);
client.Connect("Don't wory my IPV4 Is Here", 8888);
NetworkStream stream = client.GetStream();
server = new StreamWriter(stream);
Timer t = new Timer(Send, null, 0, 10);
}
public void Send(Object o)
{
server.WriteLine("Hello I am bob");
server.Flush();
}
}
服务器
class TcpServerConnection
{
private static TcpListener tcpListener;
static void Main(string[] args)
{
tcpListener = new TcpListener(IPAddress.Any, 8888);
tcpListener.Start();
Console.WriteLine("Server started.");
while (true)
{
//blocks until a client has connected to the server
TcpClient client = tcpListener.AcceptTcpClient();
//create a thread to handle communication
//with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private static void HandleClientComm(object client)
{
while (true)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
StreamReader server = new StreamReader(clientStream);
Console.WriteLine(server.ReadLine());
}
}
}
问题
事件追踪:
入门!
喂我鲍勃
喂我鲍勃
(许多你好,我是后来鲍勃)
喂我鲍勃
(你好我鲍勃刚刚停止)
(约30秒)
不知道是因为客户端停止发送还是服务器停止接收或者两者兼而有之!但是,一旦这个运行大约30秒,服务器就停止获取发送信息。没有错误只是它不发送。
呃那些while循环看起来很无聊。尝试删除您的服务器上的while(true)。如果您试图使应用程序保持活动状态,请在主块的末尾使用console.readline。那些while循环将尝试启动一大堆线程。 – kmacdonald
@kmacdonald如果你认为它停止,因为while(true)那么请建议一些东西来替换它?对不起,我是相当新的, –
@kmacdonald也许每个客户端的对象然后每10ms定时器我会通过每个客户端并接收列表中的数据? –