java的TCP客户端和服务器
问题描述:
我有以下的主机java的TCP客户端和服务器
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异常:连接复位
我没有使用Java的插座一会儿
答
,但以下修复它在我的机器上:
在客户端调用out.println(nm)
而不是out.print(nm)
。
我认为这可能与自动冲洗有关,其中println
自动冲洗但print
没有。不过,不知道为什么print
会导致Socket异常。
编辑:你真的应该一个try
内做与插座的一切,并有finally
调用上的插座close()
。
+0
,实际上它也修复它在我的机器上,但我不明白为什么 – n0ob 2010-02-13 05:00:51
答
没有。 print()只是发送数据。 println()发送数据和一个行结束符。 readLine()阻塞,直到收到行结束符。因此,您必须调用println(),或者以其他方式发送行终止符。
...当它崩溃时它会抛出什么异常? – Marius 2010-02-13 04:43:34
它抛出异常Java.net.SocketException:连接重置 – n0ob 2010-02-13 04:46:22
你使用什么端口? – 2010-02-13 04:48:46