0
何か問題があると教えてください。また、このコードをデバッグしようとしていたことに注意してください。コードによっては余分なものでなくてもいいかもしれませんが、動作しないようにしてください。私は、その両側でconsole.writeを使用し、上記のsocket.read()しか示していないため、クライアントがメッセージを受信していないことを知っています。私はこの2つのconsole.writeをこの投稿に残しました。C#クライアントがサーバーからメッセージを受信していない、何が間違っているかわからない
サーバー:
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");
}
}
}
共通namin g規約:クラスフィールド名は小文字で始まります(あなたがした)、それと関連するプロパティは同じ名前(スペル)ですが、大文字で始まります。混乱要因を抑えます。 – radarbob
おかげさまで、次回はそのことを覚えておきます。 – Shredder2500