67,512
社区成员
发帖
与我相关
我的任务
分享
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
StringBuffer sb = new StringBuffer();
int b ;
// ASCII中的#为35
while ((b = in.read()) != 35) {
sb.append((char)b);
}
System.out.println("Server:"+sb.toString());
[quote=引用 20 楼 u011004037 的回复:] 额, lz想想, 多少网站使用的.net, php, jsp, 客户端呢? pc上应该是C, 不照样通信了, 其实网络本来就适应不同架构不同系统之间的互联, 怎么会和语言有关系呢? 不过可能会在一些细节上不一样, 导致不好对接吧, 比如 这个会自动刷新, 那个会积累到一定程度再发,我也不知道, 没学过.net lz最好在过一遍自己的代码, 看看有没有什么细节上有错误,
额, lz想想, 多少网站使用的.net, php, jsp, 客户端呢? pc上应该是C, 不照样通信了, 其实网络本来就适应不同架构不同系统之间的互联, 怎么会和语言有关系呢? 不过可能会在一些细节上不一样, 导致不好对接吧, 比如 这个会自动刷新, 那个会积累到一定程度再发,我也不知道, 没学过.net lz最好在过一遍自己的代码, 看看有没有什么细节上有错误,
[quote=引用 17 楼 guoqiang139555 的回复:] 弱弱的问下,刚才我问了下他们说客户端是用.net写的,这个有影响吗
我用InputStreamReader这个试过,看了下发送时间,是指一分钟以内发过来的
郁闷还是不行,我同时用bur.read(),bur.readLine()都试过了,我自己测试的时候怎么都行,但是用他们那个GPS设备发的时候就是只能收到流,流里面是有数据的,但是就是取不到数据,
弱弱的问下,刚才我问了下他们说客户端是用.net写的,这个有影响吗
我用InputStreamReader这个试过,看了下发送时间,是指一分钟以内发过来的
郁闷还是不行,我同时用bur.read(),bur.readLine()都试过了,我自己测试的时候怎么都行,但是用他们那个GPS设备发的时候就是只能收到流,流里面是有数据的,但是就是取不到数据,
额 lz确定他们正确的发送数据了? 如果方便, 可否提供一下抓的包,还有lz现在的程序版本中的接受数据部分.
客户端有没有对输出流进行flush
额,不知道你客户端的代码, 超时是不是手工输入太慢了, 超时还可能是另一个原因,就是接收的"#"带有回车/换行,所以该退出时却没有退出,还在接收,然后就超时了, lz可以试试把判断条件改为if (msg.trim().endsWith("#")) {//遇到#时就结束接收 break; }
public String readLine() throws IOException 读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。 返回: 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 抛出: IOException - 如果发生 I/O 错误
import java.net.*;
import java.io.*;
public class SocketClient{
public static void main( String[] args ) throws Exception{
Socket client = new Socket( "127.0.0.1", 40000 );
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
PrintStream out = new PrintStream(client.getOutputStream());
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true){
System.out.println("输入信息>");
String str = input.readLine();
out.print(str);
//System.out.println(buf.readLine());
if( "exit".equalsIgnoreCase(str) ){
break;
}
}
}
}
import java.io.*;
import java.net.*;
public class SocketServer{
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(40000);
Socket client = server.accept();
PrintStream out = new PrintStream(client.getOutputStream());
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
client.setSoTimeout(60000);
while(true){
System.out.println( buf.read() ); // 当用这个读的时候, 没有一点问题, 只不过读到的是ASCII码
System.out.println( buf.readLine() ); // 用这个读的时候有两种可能, 超时 或者 客户端关闭连接, 抛出异常....
}
}
}
也就是说,一次都没有读进来? 那要不试试用BufferedReader的这个方法读, 一次10个字符, public int read(char[] cbuf, int off, int len) 另外, lz不是抓包了吗? 看看他们连接的时间, 还有他们发送一个回车符或者结束连接的时间, 之间的差值是不是大于1分钟