Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ServerSocket java未读取inputStream?_Java_Jsp_Client Server - Fatal编程技术网

ServerSocket java未读取inputStream?

ServerSocket java未读取inputStream?,java,jsp,client-server,Java,Jsp,Client Server,我写了一个服务器是java,下面是代码: public mainClass() { try { ss = new ServerSocket(8080); while (true) { socket = ss.accept(); System.out.println("It is accept!"); in = new BufferedRead

我写了一个服务器是java,下面是代码:

public mainClass() 
{ 
    try 
    { 
        ss = new ServerSocket(8080); 

        while (true) 
        { 
            socket = ss.accept(); 
            System.out.println("It is accept!");

            in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
            //out = new PrintWriter(socket.getOutputStream(),true); 

            line = in.readLine(); 
            System.out.println("you input is :" + line); 
            //out.close(); 
            in.close(); 
            socket.close();

        } 

    } 
    catch (IOException e) 
    {

    }
我使用iPhone应用程序作为客户端。 现在我的问题是,当应用程序在iphone上运行时,服务器没有读取输入流。。但是一旦应用程序终止,java程序就会打印出发送到服务器的字符串..不确定这里发生了什么..如果这不是一个好问题,很抱歉

- (void)viewDidLoad {
[super viewDidLoad];

socket = [[LXSocket alloc]init];

if ([socket connect:@"10.211.55.2" port:8080]) {

    NSLog(@"socket has been created");
}
else {
    NSLog(@"socket couldn't be created created");
}

@try {

[socket sendString:@"Hi This is a second test"];
}

@catch (NSException * e) {
NSLog(@"Unable to send data");
}


    [super viewDidLoad];
}

谢谢,
TC

缓冲读取器
可能很危险;如果一次只读取少量数据,或者数据通过网络传输,缓冲会导致短线“卡住”。如果仅使用
BufferedReader
获取
readLine()
,请执行以下操作:

new BufferedReader(new InputStreamReader(socket.getInputStream()), 1);

这个额外的参数将缓冲区大小设置为1个字符,有效地将其关闭。这通常可以解决此类问题。

我的猜测是,客户端应用程序不会在其发送的字符串末尾发送任何换行符。因此
BufferedReader.readLine()
等待一个EOL字符,并且只在客户端应用程序结束时返回字符串,因为此时连接已关闭,读者知道永远不会有EOL,并且字符串是它将接收到的最后一行。

根据我自己的经验,
readLine
不是一个好主意,尤其是在使用不同语言和平台时,更好的方法是使用
InputStreamReader
及其方法,并就每次发送的长度达成双方一致

再说一次,我没有提到这一点,只有我的经验


另外,查看您的代码,您发送的字符串没有新行字符:
[socket sendString:@“您好,这是第二个测试”]
也许在结尾添加
\n
会帮你解决问题。

你能展示iPhone上运行的相关代码吗(我假设目标C)?如果你为此提出一个新问题会更容易,请展示双方的代码,如果你有错误日志,请显示错误日志。我可能不会回答这个问题,因为我已经起床34个多小时了,开始感到有点累:)