Java Socket 未向客户端和服务器发送消息

Posted

技术标签:

【中文标题】Java Socket 未向客户端和服务器发送消息【英文标题】:Java Socket not sending message to the Client & The Server 【发布时间】:2013-11-10 18:20:18 【问题描述】:

我的 Socket 没有将消息发送到服务器或返回给客户端...,IDK 为什么但我可以连接到服务器...。

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

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

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]);



【问题讨论】:

不要在同一个套接字上使用多个流/读取器/写入器。在插座的整个生命周期内使用同一对。否则缓冲的会从无缓冲的窃取数据。 【参考方案1】:

也许您的问题与以下方面有关:

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

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

【讨论】:

以上是关于Java Socket 未向客户端和服务器发送消息的主要内容,如果未能解决你的问题,请参考以下文章

java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写

Java 实例演示-ServerSocket 和 Socket 通信实例

socket java实现客户端多线程接受消息并发送消息给服务器,并发执行

java是如何实现聊天功能的?

Spring Websocket 处理程序未向所有客户端发布消息

具有消息(文本)和文件传输的 Java Socket 多用户聊天应用程序