0
무엇이 잘못되었는지 알려주세요. 또한이 코드를 디버깅하려고 시도 했으므로 일부 코드가 추가로 필요하지는 않지만 작동하지 않도록해야합니다. 나는 그것의 양쪽에 console.write를 사용했기 때문에 클라이언트가 메시지를받지 못한다는 것을 안다. socket.read() 만 보았다. 나는이 두 콘솔을 남겨 뒀다.이 포스트에 써라.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