【发布时间】:2012-02-13 06:51:28
【问题描述】:
我正在尝试创建一个程序,该程序允许用户将他们编写的某些第三方代码的 JAR 文件上传到在线服务器,然后接收返回的字符串消息作为响应。
在线服务器使用 Java 和标准 TCP Socket 网络进行编码。客户端使用了一个额外的软件,这意味着我必须使用 C# 作为文件上传器。我编写的代码包含在下面。在这个程序中,文件上传器工作正常,但由于某种原因,客户端在到达 input.ReadLine() 时会挂起,它应该从服务器接收字符串消息响应。
public static string sendFile(string filepath) {
String response = "";
// Get the file
Stream fileStream = File.OpenRead(filepath);
byte[] buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, buffer.Length);
try {
// Create the connection
TCPClient client = new TCPClient("127.0.0.1", 21000);
NetworkStream stream = client.GetStream();
// Send the file to the server
stream.Write(buffer, 0, buffer.Length);
stream.Flush();
// Receive a single string response from the server
if (stream.CanRead) {
StreamReader input = new StreamReader(stream);
inputString = input.ReadLine();
}
input.Close();
stream.Close();
client.Close();
}
catch (IOException e) {
print ("Error: " + e);
}
// Return the response message string
return inputString;
}
我还尝试使用 StreamWriter 实现上面的代码,而不是直接从 NetworkStream 本身编写。不幸的是,StreamWriter 类没有发送字节数组的方法(只有一个字符数组)。我想知道问题是否是由于我直接调用 NetworkStream 的 Write 方法而不是使用 StreamWriter 引起的。
如果有人知道为什么上面的代码不起作用,请告诉我。或者,如果您有不同的解决方案允许我使用相同的 TCPClient 连接发送文件(字节数组)并接收回字符串消息,那么也请随时提及。
问候,
米达维。
【问题讨论】:
-
StreamReader.ReadLine 需要换行、回车或组合。服务器会发送这个吗?
标签: c# networking tcp networkstream