qq_28076861 2015-07-29 06:58 采纳率: 0%
浏览 4225

socket编程发送消息出现socket closed求大神,急

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;

import java.net.ServerSocket;
import java.net.Socket;

public class Server {

ServerSocket ss;
Socket  s ; 
Clients clients;
DataInputStream dis;

boolean startServer = false;

public void startServer(){


    try {
        ss   = new ServerSocket(8888);//8888是TCP端口号
        startServer = true;
        while(startServer){

             s = ss.accept();
            System.out.println(" connected!");

             clients = new Clients(s);
            new Thread(clients).start();    
        }
    }catch(IOException e){
        e.printStackTrace();
}finally{
    try {
        ss.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}
public static void main(String[] args) {

    new Server().startServer();
}

}

class Clients implements Runnable{//包装类,把外部连接的client包装

private Socket s;
private boolean isConnected = false ;
private DataInputStream dis;


public Clients(Socket s) {

    this.s = s;

    try {
        isConnected = true;
        dis = new DataInputStream(s.getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public void run() {

    while(isConnected){

        try {
            String str = dis.readUTF();//阻塞:它会一直等待

System.out.println(str);
} catch (EOFException e){
System.out.println("Client is closed!");
}catch (IOException e1) {
e1.printStackTrace();
}finally{
try {
if(dis!=null)
{
dis.close();
}else{
;
}
if(s!=null)
{
s.close();
}else{
;
}
} catch (IOException e) {
e.printStackTrace();
}

}

    }   
}

}

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {

Socket s;
PrintWriter pw;
DataOutputStream dos;
String line = "";
Scanner reader = new Scanner(System.in);

public void startClient(){

    try {
        s  = new Socket("127.0.0.1", 8888);

        dos = new DataOutputStream(s.getOutputStream());
        System.out.println("connected");
        do{
            System.out.print("please input:");

            line = reader.next();
            dos.writeUTF(line);
            dos.flush();

        }while(!line.equals("bye"));

            dos.close();
            s.close();

    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public static void main(String[] args) {

    new Client().startClient();
}

}

java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at Clients.run(Server.java:75)
at java.lang.Thread.run(Unknown Source)

  • 写回答

3条回答 默认 最新

  • oyljerry 2015-07-29 08:55
    关注

    socket closed,是不是你访问的服务端关闭了,或者被防火墙等拦截禁止你访问
    或者你的服务端程序直接出错退出了

    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀