2010-02-13 2 views
0

У меня есть следующий хозяин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 исключения: подключение сброс

+0

... и какое исключение он бросает, когда он падает? – Marius

+0

Он выдает исключение Java.net.SocketException: connection reset – n0ob

+0

Какой порт вы используете? –

ответ

1

Я не использовал Java сокетов на некоторое время, но следующие исправления он на моей машине:

В клиенте, вызовите out.println(nm) вместо out.print(nm).

Я думаю, что это может иметь какое-то отношение к автоматической промывке, где println автофургонов, но print нет. Тем не менее, не уверен в моей голове, почему print вызовет исключение Socket.

Edit: вы действительно должны делать все с сокетами в try, и есть finally, что вызывает close() на сокеты.

+0

, что на самом деле исправляет его и на моей машине, но я не понимаю, почему – n0ob

2

Nope. print() просто отправляет данные. println() отправляет данные и терминатор линии. readLine() блокируется до тех пор, пока не будет получен терминатор. Итак, где-то вдоль линии вы должны вызвать println() или отправить терминатор линии другим способом.

Смежные вопросы