Проблема программирования сокетов Java - PullRequest
0 голосов
/ 22 марта 2011

Эй, я пытаюсь запустить этот программный код сокета.

Это код на стороне сервера -

package sockettest;    

import java.net.*;    
import java.io.*;     

public class Server {    
public static void main(String[] args) throws IOException {

ServerSocket serverSocket = null;   
try 
{  
  serverSocket = new ServerSocket(139);   
} 
catch (IOException e) 
{  
  System.err.println("not able to listen on port");  
  System.exit(1);  
}

Socket clientSocket = null;   
try 
{
   clientSocket = serverSocket.accept();    
} 
catch (IOException e) 
{   
   System.err.println("Accept failed.");   
   System.exit(1);   
}

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); // Out is Outputstream is used to write to the Client .   
BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); // in is used to read the Client's input. 
String inputLine, outputLine;     

out.println("Hey! . Who are you?"); // Writes to client as "Hey! . Who are you?"

while ((inputLine = in.readLine()) != null)         
{
 // Reads the input from the Client. if it is "bye" the program ends.

   if (inputLine.equalsIgnoreCase("Bye"))   
   {    
       out.println("Bye");   
       break;   
   }   
   else    
   {    
      out.println("Hello Mr. " + inputLine);    
   }    
 }     
 out.close();    
 in.close();     
 clientSocket.close();     
 serverSocket.close();     
}     
}    

Этот код выполняется на стороне клиента -

import java.io.*;    
import java.net.*;     

public class Client 
{      
   public static void main(String[] args) throws IOException {     

Socket kkSocket = null;     
PrintWriter out = null;     
BufferedReader in = null;     

try 
{     
   kkSocket = new Socket("192.168.2.3", 139);     
   out = new PrintWriter(kkSocket.getOutputStream(), true); // Out may be used to write to server from the client       
   in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); // in will be used to read the lines sent by the Server.      
} 
catch (UnknownHostException e)
{     
   System.err.println("Unidentified host.");     
   System.exit(1);     
}
catch (IOException e) 
{          
   System.err.println("Couldn't get I/O for the connection to.");      
   System.exit(1);      
}      


BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));     
String fromServer;     
String fromClient;      

while ((fromServer = in.readLine()) != null) {      
System.out.println("Server: " + fromServer);      
if (fromServer.equals("Bye"))     
break;     

fromClient = stdIn.readLine();     
if (fromClient != null) {      
System.out.println("Client: " + fromClient);      
out.println(fromClient);       
}      

}       


out.close();      
 in.close();      
stdIn.close();       
kkSocket.close();
}     
}    

Я запускаю коды на Eclipse как на стороне клиента, так и на стороне сервера.Используя команду netstat -an в командной строке cmd, я вижу, что между клиентом и сервером установлено соединение, но я не могу связаться, и затмение тоже не показывает никакого вывода.Что, кажется, не так ??

Ответы [ 3 ]

0 голосов
/ 22 марта 2011

также отсутствует код вашего Сервера инициализация inputLine, * 1001 например *

String inputline = "";

перед циклом while

0 голосов
/ 22 марта 2011

имейте в виду, что сокеты блокируются, если вы читаете или пишете ...

ваш клиент все время читает, потому что он ожидает каждую информацию на сервере пока он не станет нулевым

и ваш сервер также все время читает и ждет ввода.

так что пока сервер и клиент ждут ввода, никто не получит никаких данных.

попробуйте придумать протокол для связи между сервером и клиентом. * 1009 например *

Sever to Client: Hello Who are you?
Client receives Data and replies: Client
Server receives Information: You Are now authorized, what ya gonna do?
and so on ^^

также для отправки сообщения необходим out.flush ()

0 голосов
/ 22 марта 2011

Вы не сказали нам, в чем проблема. Однако, бросив беглый взгляд на ваш код, я бы посоветовал не слушать порт 139, поскольку он уже используется NetBios в Windows и может вызвать конфликт.

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