2013-10-30 113 views
0

我的套接字不发送消息到服务器或回到客户端...,IDK为什么但我可以连接到服务器....Java套接字不发送消息到客户端和服务器

我试图解决这个问题,但我不能,每一种可能的方式都不适合我。 所以我希望在这里的一些人可以帮助我。

感谢您的阅读..,这里是服务器:

package test; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Timer; 
import java.util.TimerTask; 

import ADG.luxemita.LuxEmita; 

public class serverHostTest{ 

static Socket socket; 
static DataInputStream in; 
static ServerSocket serverSocket; 
//static InputStreamReader isr; 
static BufferedReader br; 
//static BufferedReader stdBr; 
//static InputStream is; 
static DataOutputStream out; 
//static OutputStreamWriter osw; 
static BufferedWriter bw; 
//static OutputStream os; 
static PrintWriter stdOut; 

public serverHostTest(String[] args) throws Exception{ 
    int port = Integer.parseInt(args[2]); 

    LuxEmita.luxLogger.logInfo("Starting Server...."); 
    serverSocket = new ServerSocket(port); 
    LuxEmita.luxLogger.logInfo("Started Server...."); 
    socket = serverSocket.accept(); 
    LuxEmita.luxLogger.logInfo("Intialized Socket...."); 
    out = new DataOutputStream(socket.getOutputStream()); 
    out.writeUTF("Server Started Successfully!, Some more data..."); 

    //SetupEvent.initInstance(); 

    /*out = new DataOutputStream(socket.getOutputStream());   
    os = socket.getOutputStream(); 
    osw = new OutputStreamWriter(os); 
    bw = new BufferedWriter(osw); 
    stdOut = new PrintWriter(socket.getOutputStream(), true); 

    in = new DataInputStream(socket.getInputStream());  
    is = socket.getInputStream(); 
    isr = new InputStreamReader(is); 
    br = new BufferedReader(isr); 
    stdBr = new BufferedReader(new InputStreamReader(System.in));   
    in2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));*/ 

    stdOut = new PrintWriter(socket.getOutputStream(), true); 
    br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

    if(serverHostTest.serverSocket != null && socket != null){ 
     new Timer().schedule(new TimerTask() { 
      public void run(){ 
       try { 
        if(br.readLine() != null){ 
         String test = br.readLine(); 
         System.out.println("Received MSG: " + test); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, 1, 1); 
    } 
} 

public static void say(String[] args) throws Exception { 
    stdOut.write(args[2]); 
    stdOut.flush(); 
    System.out.println("Message sent to the client is " + args[2]); 
} 

} 
+0

请勿在同一套接字上使用多个流/读取器/写入器。在套接字的生命周期中使用同一对。否则,缓冲的数据会从未缓冲的数据中窃取数据。 – EJP

回答

2

也许你的问题有事情做与:

  try { 
       if(br.readLine() != null){ 
        String test = br.readLine(); 
        System.out.println("Received MSG: " + test); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

注意你是如何阅读的两倍。将第一个br.readLine()存储在String变量中,然后使用该变量而不是再次读取。

相关问题