说一下我是用JAVA做Server端,c#写的WINFORM做CLIENT端。
JAVA这边是TOMCAT做容器。
当我的tcpclient连接成功后,开始发送数据,,,,如果只发送数据,不接收server端的确认接收数据正常的信息(即一个"login_ok"的字符串)话是没有任何问题的,当在发送数据后加入接收SERVER返回的确认信息时就会出现“无法从传输连接中读取数据: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。。”。原因是当client加入接收数据时server就会一直处于等待接收信息的状态,不往下执行。下面贴出代码片段。请大大们帮忙解释下,并给些建议。
server:
Java code
-
public
void
handleConnection(Socket connection) {
System.out.println(
"
客户:
"
+
connection.getInetAddress()
+
"
在时间:
"
+
Calendar.getInstance().getTime().toString()
+
"
访问过!
"
);
try
{
PrintWriter streamWriter
=
new
PrintWriter(connection.getOutputStream());
BufferedReader streamReader
=
new
BufferedReader(
new
InputStreamReader(connection.getInputStream()));
System.out.println(
"
111111111111111
"
);
String read
=
streamReader.readLine();
//
如果客户端加入接收信息,就会停在这里不往下执行.
System.out.println(
"
222222222222222
"
);
System.out.println(read);
sun.misc.BASE64Decoder base64
=
new
sun.misc.BASE64Decoder();
read
=
new
String(base64.decodeBuffer(read));
System.out.println(
"
client said:
"
+
read);
String msg
=
"
login_ok
"
;
streamWriter.write(msg);
streamWriter.flush();
streamWriter.close();
streamReader.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
client:
C# code
-
public
string
sendLogin(
string
xml)
{
client
=
new
TcpClient(
"
127.0.0.1
"
,
19999
);
client.ReceiveTimeout
=
1000
;
client.SendTimeout
=
2000
;
ns
=
client.GetStream();
byte
[] b
=
System.Text.Encoding.UTF8.GetBytes(Base64.Base64Code(xml));
ns.Write(b,
0
, b.Length);
ns.Flush();
b
=
new
byte
[
256
];
//
***********下行就是接收server返回信息,不加入的话server端就可以接收到这里发送的数据,加入的话server就一直处于等待读取client发送数据的状态,导致这里报错*************/
Int32 bytes
=
client.GetStream().Read(b,
0
, b.Length);
//
就是这句话出错,错误信息是“无法从传输连接中读取数据: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。。”
string
responseData
=
System.Text.Encoding.UTF8.GetString(b,
0
, bytes);
ns.Close();
client.Close();
return
responseData;
}
如果client不加入接收信息的话server端是可以正常执行的:
*********************************************
++++++ 客户请求成功 ++++++
客户:/127.0.0.1在时间:Fri Jul 31 10:41:55 CST 2009访问过!
1111111111
2222222222
client said:jfdklsjfldksjfsdklfjdsfjdsklfjskfjdslfkjfkdjfl
*******************************
如果client加入接收信息的话server端就一直停在读取信息上:
*********************************************
++++++ 客户请求成功 ++++++
客户:/127.0.0.1在时间:Fri Jul 31 10:41:55 CST 2009访问过!
1111111111
*******************************
|