java的TCP客户端和服务器

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的插座一会儿
+0

...当它崩溃时它会抛出什么异常? – Marius 2010-02-13 04:43:34

+0

它抛出异常Java.net.SocketException:连接重置 – n0ob 2010-02-13 04:46:22

+0

你使用什么端口? – 2010-02-13 04:48:46

,但以下修复它在我的机器上:

在客户端调用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(),或者以其他方式发送行终止符。