web开发内容

本文讨论了Socket连接的正确关闭流程,并提供了一个示例代码,解决了使用Socket进行数据读取时遇到的问题。通过代码分析,指出关闭连接的重要性,并提供了一种改进的数据读取方法,以避免数据读取失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

_socket = new Socket (host, port);
System.out.println(new BufferedReader(new InputStreamReader(_socket.getInputStream())).readLine());
就最后一句出错了



对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:10

yuzl32

(有酒醉)

等 级:
2
#1楼 得分:0回复于:2006-01-10 10:50:23你每使用完连接后有没有关闭?


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:【分享面试题二】Spring,hibernate,struts的面试笔试题(含答案)

takecare

(大厅)

等 级:

#2楼 得分:0回复于:2006-01-10 13:18:17是对方关闭了连接,看看socket server的代码如何实现的


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:几道小小的题目一起和大家更进一步地了解 Java (Ⅳ)

sunnyBaby2006

(sunnyBaby)

等 级:

#3楼 得分:0回复于:2006-01-10 13:34:52/**
* <p> Title: </p>
*
* <p> Description: </p>
*
* <p> Copyright: Copyright (c) 2005 </p>
*
* <p> Company: </p>
*
* @author not attributable
* @version 1.0
*/
import java.net.Socket;
import java.io.*;

public class MSNConnection {
private long _transactionID = 0;
private Socket _socket;
//private NetworkStream _stream;
private BufferedReader _reader;
private BufferedWriter _writer;

public MSNConnection() {
}

public void connect (String host,int port){
_transactionID = 0;
try {
System.out.println( "host+port= " + host + port);
_socket = new Socket(host, port);
System.out.println( "==encoding=== "+new InputStreamReader(_socket.getInputStream(), "ascii ").getEncoding());
_reader = new BufferedReader(new InputStreamReader(_socket.
getInputStream(), "ascii "));
_writer = new BufferedWriter(new OutputStreamWriter(_socket.
getOutputStream(), "ascii "));
System.out.println( "connect finish!!! ");
} catch (Exception e) {
System.err.println( "Err - " + e);
}
}

public void writeCommand(String command, String parameters, boolean bSendId) {
String line;
// check what type of format it should be
if (bSendId){
line = String.format( "{0} {1} {2} ", command, _transactionID,
parameters);
}else{
line = String.format( "{0} {1} ", command, parameters);
}
// Write the line
writeLine(line, true);
}

public void writeLine(String line, boolean writeNewLine) {
System.out.println( "Writing: " + line);
//if (writeNewLine)
try {
_writer.write(line);
System.out.println(_reader.readLine());
} catch (IOException ex) {
System.out.println( "erro= "+ex.getMessage());
System.out.println( "erro= "+ex.toString());
}
//else
//_writer.write(line);
// raise the transactionId
_transactionID++;

}

public ServerCommand readCommand(){
String line = null;
try {
//System.out.println( "redLine= "+_reader.readLine());
//System.out.println( "read= "+_reader.read());
line = _reader.readLine();
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
System.out.println( "Reading: " + line);
if (line == null) {
System.out.println( "Nothing received ");
//return " ";
return new ServerCommand();
} else {
//return " ";
return new ServerCommand(line);
}
}

public void dispose() {
if (_socket != null) {
try {
_reader.close();
_writer.close();
//_stream.Close();
_socket.close();
} catch (IOException ex) {
}
_socket = null;
}
}
}



对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:Flex3.0调用webservice,没有任何反应

sunnyBaby2006

(sunnyBaby)

等 级:

#4楼 得分:0回复于:2006-01-10 13:36:09上面是我的代码,帮我看看.不知道为什么readLine老是出错


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:散分,想问一下大家采用什么ajax框架 开发系统,为什么

yuzl32

(有酒醉)

等 级:
2
#5楼 得分:0回复于:2006-01-10 14:09:09你是Server是怎么接的?
这个看不出有什么问题.
听听楼下的看法


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:【生日祝福】祝我们的【awusoft】版主 生日快乐!!!

sunnyBaby2006

(sunnyBaby)

等 级:

#6楼 得分:0回复于:2006-01-10 14:56:16问题已解决,是第一位老兄说对了.哈哈


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP

sunnyBaby2006

(sunnyBaby)

等 级:

#7楼 得分:0回复于:2006-01-10 14:56:56不过readLine老是读成null,郁闷


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP

takecare

(大厅)

等 级:

#8楼 得分:0回复于:2006-01-10 16:44:07直接使用自己方式读取内容,然后再考虑内容的格式化


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP

sunnyBaby2006

(sunnyBaby)

等 级:

#9楼 得分:0回复于:2006-01-10 16:54:34直接使用自己方式读取内容?


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP

takecare

(大厅)

等 级:

#10楼 得分:0回复于:2006-01-10 18:10:59不好意思,写错。
按字节来取。不要取行,因为如果readline的话,必定要求对方发送的数据中带有\r或者\n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值