用Socket发送信息怎么老是报 Connection reset ??

zhanxiaoxin 2006-09-04 01:16:43
烦扰的问题,在用Socket时,老是出现Connection reset异常问题.不晓得,如何修改程序才好。请高手们指教一下.代码如下:
服务端:
import java.net.*;
import java.io.*;
public class MulServer {
public int listenPort = 3000;
public MulServer() {
}

public void acceptConnections() {
try {
ServerSocket server = new ServerSocket(listenPort, 5);
Socket incomingConnection = null;
while (true) {
incomingConnection = server.accept();
handleConnection(incomingConnection);
}
} catch (BindException e) {
System.out.println("Unable to bind to port " + listenPort);
} catch (IOException e) {
System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);
}
}
public void handleConnection(Socket connectionToHandle) {
new Thread(new ConnectionHandler(connectionToHandle)).start();
}
public static void main(String[] args) {
MulServer server = new MulServer();
server.acceptConnections();
}

class ConnectionHandler implements Runnable{
Socket socketToHandle;
public ConnectionHandler(Socket aSocketToHandle) {
socketToHandle = aSocketToHandle;
}
public void run() {
try {
PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());
BufferedReader streamReader =
new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));
String fileToRead = streamReader.readLine();
BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));
String line = null;
while ((line = fileReader.readLine()) != null)
streamWriter.println(line);
fileReader.close();
streamWriter.close();
streamReader.close();
} catch (Exception e) {
System.out.println("Error handling a client: " + e);
}
}
}
}

客户端
import java.net.*;
import java.io.*;
public class Client extends Thread {
Socket so;
public Client() throws Exception{
so = new Socket("127.0.0.1",3000);
}
public void sendMsg(String str) throws Exception{
PrintWriter pw = new PrintWriter(so.getOutputStream());
pw.print(str);
}
public void run(){
try{
this.sendMsg("tests.test");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String arg[]){
try{
Client[] c = new Client[5];
for (int i=0; i<5; i++){
c[i] = new Client();
c[i].start();
}
}catch(Exception e){
e.printStackTrace();
}
}

}
...全文
7512 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanxiaoxin 2006-09-11
  • 打赏
  • 举报
回复
不好意思,这几天都比较忙,没时间来上论坛了。
我看了我的代码,原来在程序结束前,都没关闭socket,所以server就报异常了。
谢谢楼上的建议.
Max610113 2006-09-06
  • 打赏
  • 举报
回复
你的客户端只有发送数据没有接收数据的代码,当然要你Connection reset
fishyqd 2006-09-05
  • 打赏
  • 举报
回复
pw.print(str);
改成 pw.println(str);
wshuangminlg 2006-09-05
  • 打赏
  • 举报
回复
帮顶
xpro_ming 2006-09-05
  • 打赏
  • 举报
回复
ss= new ServerSocket(port, pools);
这个方法,你先换成ServerSocket(int port)
试一下。..

看下,还有那个错误不?
wenqin2006 2006-09-05
  • 打赏
  • 举报
回复
你发送数据时用这个方法write()不要用print()或者println ()这两个是直接输到标准设备上啊!你要了解好了这些方法.然后再编写嘛!去看API你就会明白的!
zhanxiaoxin 2006-09-05
  • 打赏
  • 举报
回复
java.net.SocketException: Connection reset
zhanxiaoxin 2006-09-05
  • 打赏
  • 举报
回复
我把上面的代码修改成Socket长连接,怎么又开始报那个错了。郁闷!!
 还是先只实现发送消息,而不返回消息的功能。
服务端:
import java.net.*;
import java.io.*;

public class Server {
public ServerSocket ss;
int pools;
public Server(int port , int pools) throws Exception{
ss= new ServerSocket(port, pools);
this.pools = pools;
System.out.println(port+" "+pools);
}
public void acceptConnet() throws Exception{
while(true){
Socket s = ss.accept();
if(s!=null){
System.out.println("have set thread " + pools);
(new ServerThread(s, pools)).start();
--pools;
}
}
}

public static void main(String arg[]){
try{
Server server = new Server(3000, 5);
server.acceptConnet();
}catch(Exception e){
e.printStackTrace();
}
}

 class ServerThread extends Thread{
private Socket so;
private int numb;
public ServerThread(Socket so, int num) {
this.so=so;
numb = num;
}

public void setSo(Socket so){
this.so=so;
}
public void run(){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(so.
getInputStream()));
PrintWriter pw = new PrintWriter(so.getOutputStream());
String line;
while (true) {
if((line=br.readLine())!=null){
System.out.println("Thread "+numb+": "+line);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}

}
客户端和上面差不多,我把pw.print(str)改成了pw.println(str) pw.flush();
import java.net.*;
import java.io.*;
public class Client extends Thread {
Socket so;
public Client() throws Exception{
so = new Socket("127.0.0.1",3000);
}
public void sendMsg(String str) throws Exception{
PrintWriter pw = new PrintWriter(so.getOutputStream());
pw.println(str);
pw.flush();
}
public void run(){
try{
this.sendMsg("tests.txt");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String arg[]){
try{
Client[] c = new Client[5];
for (int i=0; i<5; i++){
c[i] = new Client();
c[i].start();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
你看又报错了。
zhanxiaoxin 2006-09-05
  • 打赏
  • 举报
回复
是啊,我是新手,拿了一段代码,自己修改点东西,然后老是报connection reset
wenqin2006 2006-09-04
  • 打赏
  • 举报
回复
你也是新手怕??是不是?
wenqin2006 2006-09-04
  • 打赏
  • 举报
回复
服务端没有发送数据.你看哈有streamWriter.write()没有?没有啥!!!!

62,627

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧