Я написал Simple Socket Server на C # и работает довольно хорошо. Я использую соединение для отправки некоторых * .xml файлов с одного устройства (мобильный телефон, ПК) на другое.У меня есть 3 разных клиента, C #, Delphi и Java.Сервер работает с C # и Delphi, но с Java-клиентом он не работает должным образом.
Проблема с Java-клиентом заключается в том, что я просто получаю около 3/4 данных ототправленный XML-файл.Я наблюдал за отладчиком, и каждый характер документа отправляется Java-клиентом, но он не получен.Неважно, насколько длинен Документ, всегда чего-то не хватает.Я искал несколько часов, чтобы найти причину, но не смог.Может быть, вы, ребята, можете мне помочь.
Сервер:
public void WaitForClient(String filepath)
{
int bytesRcvd;
Byte[] rcvBuffer;
string receivedMessage = "";
try
{
{
// Generiere eine Client Verbindung
//client = listener.AcceptTcpClient();
client = listener.AcceptSocket();
//netStream = client.GetStream();
SetTexts(powercomConsole, "Handling client - ");
//Console.Write("Handling client - ");
int z = 0;
//int totalBytesEchoed = 0;
rcvBuffer = new byte[64];
//while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0)
do
{
bytesRcvd = client.Receive(rcvBuffer);
for (int i = 0; i < rcvBuffer.Length; i++)
{
receivedMessage += (rcvBuffer[i] != 0) ? Convert.ToChar(rcvBuffer[i]).ToString() : "";
z++;
if (!receivedMessage.Equals(""))
Console.WriteLine("hans");
//receivedMessage += Convert.ToChar(rcvBuffer[i]);
}
rcvBuffer = new byte[64];
} while (bytesRcvd != 0);
WriteFile(filepath, receivedMessage);
SetTexts(powercomConsole, "Generated File written to " + filepath);
//Console.WriteLine("New File written to " + filepath);
// Schließe den Socket. Wir haben den Clienten erfolgreich abgewickelt
CloseServer();
SetTexts(powercomConsole, "Server closed");
//Console.WriteLine("Server closed");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
//netStream.Close();
}
}
Клиент:
public boolean sendByteBuffer(String profilename) {
ByteBuffer buffer = fileToByteBuffer(profilename);
for (int i = 0; i < fSize; i++)
{
char hans = (char) buffer.get();
out.print(hans);
}
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
fChan.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
fIn.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
private ByteBuffer fileToByteBuffer(String filepath) {
ByteBuffer mBuf = null;
try {
fIn = new FileInputStream(filepath);
fChan = fIn.getChannel();
fSize = fChan.size();
mBuf = ByteBuffer.allocate((int) fSize);
fChan.read(mBuf);
mBuf.rewind();
// for (int i = 0; i < fSize; i++)
// System.out.print((char) mBuf.get());
// fChan.close();
// fIn.close();
} catch (IOException exc) {
System.out.println(exc);
System.exit(1);
}
return mBuf;
}
Это метод fileToByteBuffer()
, который я использую в методе sendByteBuffer
Спасибо за продвижение;)