C#客户端没有收到来自服务器的消息,不确定出了什么问题
本文关键字:不确定 消息 问题 什么 服务器 客户端 | 更新日期: 2023-09-27 18:25:05
请告诉我出了什么问题。还要注意的是,我一直在尝试调试,所以有些代码可能是多余的,不需要,但不应该阻止它工作。我知道客户端从来没有收到消息,因为我在消息的两边都使用了console.write,只有上面的socket.read()显示。我留下了那两个安慰。写在这篇帖子上。
服务器:
class class1
{
static void Main(string[] args)
{
TcpListener serverSocket = new TcpListener(IPAddress.Any, info.Port);
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
log.write(">> Listening for Clients'n");
bool running = true;
while (running)
{
clientSocket = serverSocket.AcceptTcpClient();
newClient client = new newClient(clientSocket,log);
Thread clientThread = new Thread(new ThreadStart(client.start));
clientThread.Start();
}
}
}
class Client
{
private clientType cType;
private EndPoint cIP;
private TcpClient socket;
private NetworkStream cStream;
public NetworkStream stream { get { return cStream; } }
public clientType Type
{
get
{
return cType;
}
set
{
cType = value;
}
}
public EndPoint IP
{
get
{
return cIP;
}
set
{
cIP = value;
}
}
public Client(TcpClient clientSocket)
{
socket = clientSocket;
cStream = socket.GetStream();
}
}
class newClient
{
Client client;
public newClient(tcpClient socket)
{
client = new Client(socket);
}
public void start()
{
loginObj loginRequest = new loginObj();
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream memory = new MemoryStream();
formatter.Serialize(memory, loginRequest);
byte[] tempOutBytes = new byte[10025];
byte[] outBytes;
int numOfBytes = memory.read(tempOutBytes,0,tempOutBytes.Length);
outBytes = new byte[numOfBytes];
for(int counter = 0; counter < nuOfBytes; counter++)
outBytes[counter] = tempOutBytes[counter];
client.stream.Write(outBytes,0,outBytes.Length);
//Rest of code waits for respond but client never gets the message so rest of code is not needed
}
}
客户端:
class network
{
private TcpClient socket = new TcpClient();
public void start()
{
NetworkStream stream = socket.GetStream();
MemoryStream memory = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
byte[] tempInBytes = new byte[10025];
byte[] inBytes;
int numOfBytes = stream.Read(tempInBytes,0,tempInBytes.Length);
inBytes = new byte[numOfBytes];
for(int counter = 0; counter < numOfBytes; counter++)
inBytes[counter] = tempInBytes[counter];
memory.write(inBytes,0,inBytes.Length);
object msgObj = formatter.Deserialize(memory);
Type msgType = msgObj.GetType();
if(msgType == typeof(loginObj))
{
console.write("It works");
}
}
}
服务器程序
using System;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace Server
{
class Program
{
static void Main(string[] args)
{
TcpListener server = new TcpListener(5000);
server.Start();
Console.WriteLine("Server Started at {0}",DateTime.Now.ToString());
while (true)
{
Socket client = server.AcceptSocket();
Thread th = new Thread(ProcessSocket);
th.Start(client);
}
}
public static void ProcessSocket(object o)
{
Socket client = (Socket)o;
NetworkStream nws = new NetworkStream(client);
StreamReader sr = new StreamReader(nws);
while(client.Connected)
{
string s = sr.ReadLine();
Console.WriteLine(" Message from {0} is :{1}", client.LocalEndPoint.ToString(), s);
}
}
}
}
客户端程序
using System;
using System.Net.Sockets;
using System.IO;
namespace Client
{
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
client.Connect("IP/Hostname", 5000);
NetworkStream nws = new NetworkStream(client.Client);
StreamWriter sw = new StreamWriter(nws);
while (client.Connected)
{
Console.Write("your Message:");
string s=Console.ReadLine();
sw.WriteLine(s);
sw.Flush();
Console.WriteLine("Message sent to server");
}
}
}
}