Java客户端服务器Socket相关问题

问题描述 投票:0回答:3
import java.io.*;
import java.net.*;

public class Client {

    public static void main(String[] args) throws Exception {
        
        String ip = "localhost";
        int port = 5643;
        Socket s = new Socket(ip, port);
        String str = "Sagar Tanwar";
        OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
        PrintWriter pw = new PrintWriter(os);
        os.write(str);
        os.flush();
    }
}
import java.net.*;
import java.io.*;

public class Server {

    public static void main(String[] args) throws Exception {
        
        System.out.println("Server is started");
        ServerSocket ss = new ServerSocket(5643);
        
        System.out.println("Server is waiting");
        Socket s = ss.accept();
        
        System.out.println("Client Connected");
        
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str = br.readLine();
        
        System.out.println("Client Data : "+str);
    }
}
Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:606)
        at java.net.Socket.connect(Socket.java:555)
        at java.net.Socket.<init>(Socket.java:451)
        at java.net.Socket.<init>(Socket.java:228)
java client-server bufferedreader
3个回答
3
投票

Client.java
中更改此行:

String str = "Sagar Tanwar";

至:

String str = "Sagar Tanwar\r\n";

您的服务器期望读取整行

br.readLine()
),并且它会继续读取,直到您的客户端保持连接。一旦客户端断开连接,就会抛出异常,因为服务器无法读取新行。

旁注

在我的系统上:

  • 您的客户端抛出:
    java.net.ConnectException: Connection refused: connect
    - 如果服务器未处于活动状态
  • 你的服务器抛出:
    java.net.SocketException: Connection reset
    - 如果服务器无法从客户端读取整行

0
投票

如果您在客户端类结束时关闭连接,一切都会为您工作。

    String ip = "localhost";
    int port = 5643;
    Socket s = new Socket(ip, port);
    String str = "Sagar Tanwar";
    OutputStreamWriter os = null;
    try {
        os = new OutputStreamWriter(s.getOutputStream());
        os.write(str);
        os.flush();
    } finally {
        if (os != null)
            os.close();
    }

或“尝试使用资源”

    String ip = "localhost";
    int port = 5643;
    Socket s = new Socket(ip, port);
    String str = "Sagar Tanwar";
    try (OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream())) {
        os.write(str);
        os.flush();
    }

-2
投票
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws Exception {

        String ip = "localhost";
        int port = 5643;
        Socket s = new Socket(ip, port);
        String str = "Sagar Tanwar";
        OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
        PrintWriter pw = new PrintWriter(os);
        os.write(str);
        os.flush();
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.