TCP-клиент и сервер Java - PullRequest
       8

TCP-клиент и сервер Java

0 голосов
/ 13 февраля 2010

У меня есть следующий хост

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: сброс соединения

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

Неа. print () просто отправляет данные. println () отправляет данные и разделитель строки. readLine () блокирует до получения конца строки. Поэтому где-то вдоль линии вы должны вызвать println () или отправить терминатор строки другим способом.

1 голос
/ 13 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...