java tcp客户端和服务器

java tcp客户端和服务器,java,Java,我有以下主持人 package clserver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Main {

我有以下主持人

package clserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


public class Main {
//instance vars
static ServerSocket sSocket = null;
static int serverPort = 0;
static Socket cSocket = null;
static PrintWriter out = null;
static BufferedReader in = null;


public static void main(String[] args) throws IOException {
        System.out.println("\n\n\nTCP Server Client\n\nEnter port number:");
        Scanner scan = new Scanner(System.in);
        serverPort = scan.nextInt();
        try {
            //connect server to port
            sSocket = new ServerSocket(serverPort);
        } catch (IOException ex) {
            System.err.println("That port is busy");
        }
        try {
            //accept client connection
            cSocket = sSocket.accept();
        } catch (IOException ex) {
            System.err.println("Connection failed");
        }

        out = new PrintWriter(cSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));

        System.out.println(in.readLine());

      }
}
这个客户端代码是什么

package clclient;

import java.io.*;
import java.net.*;
import java.net.UnknownHostException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Main {

    //instance vars
    static Socket cSocket =null;
static PrintWriter out = null;
static BufferedReader in = null;

//server info
static String serverName = null;
static int serverPort = 0;


public static void main(String[] args) {
    try {
        System.out.println("\n\n\nTCP Chat Client\nEnter server name:");
        Scanner scan = new Scanner(System.in);
        //get server info from user
        serverName = scan.nextLine();
        System.out.println("\nEnter port number:");
        serverPort = scan.nextInt();
        //make connection to server
        cSocket = new Socket(serverName, serverPort);
        out = new PrintWriter(cSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
    } catch (UnknownHostException ex) {
        System.err.println("\ncan't find that host\n");

    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }

    String nm = "testing";
    out.print(nm);


}
}


我试图在它们之间来回发送消息,但当我发送消息时,主机崩溃。它抛出异常Java.net.SocketException:connection reset

我已经有一段时间没有使用Java套接字了,但是下面在我的机器上修复了它:

在客户端中,调用
out.println(nm)
而不是
out.print(nm)

我认为这可能与自动刷新有关,其中
println
自动刷新,而
print
不自动刷新。尽管如此,我还是无法确定为什么
print
会导致套接字异常


编辑:你真的应该在一个
尝试
中使用套接字做所有的事情,并在套接字上调用
close()

我已经有一段时间没有使用Java套接字了,但是下面的方法在我的机器上修复了它:

在客户端中,调用
out.println(nm)
而不是
out.print(nm)

我认为这可能与自动刷新有关,其中
println
自动刷新,而
print
不自动刷新。尽管如此,我还是无法确定为什么
print
会导致套接字异常


编辑:你真的应该在一个
尝试
中使用套接字做所有事情,并最终拥有一个
对套接字调用
close()

不。print()只发送数据。println()发送数据和行终止符。readLine()会一直阻塞,直到收到行终止符。因此,在线路的某个地方,您必须调用println(),或者以其他方式发送线路终止符。

否。print()只发送数据。println()发送数据和行终止符。readLine()会一直阻塞,直到收到行终止符。因此,您必须调用println(),或者以其他方式发送一个行终止符。

…当它崩溃时会抛出什么异常?它抛出异常Java.net.SocketException:connection reset您使用的端口是什么?端口22222。只是随机选择它,刚刚尝试了21212,但效果不太好…当它崩溃时会引发什么异常?它会引发异常Java.net.SocketException:connection reset您使用的端口是什么?端口2222。只是随机选择了它,刚刚试了21212,但效果不太好,它实际上也能在我的机器上修复,但我不明白为什么它也能在我的机器上修复,但我不明白为什么