ServerSocket java未读取inputStream?
我写了一个服务器是java,下面是代码: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
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个多小时了,开始感到有点累:)