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,是不是你访问的服务端关闭了,或者被防火墙等拦截禁止你访问
    或者你的服务端程序直接出错退出了

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?