Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java套接字线程正在工作,但没有消息_Java_Sockets - Fatal编程技术网

java套接字线程正在工作,但没有消息

java套接字线程正在工作,但没有消息,java,sockets,Java,Sockets,大家好,我正在尝试创建一个小型的客户机-服务器或服务器-客户机聊天消息应用程序作为一个实验,以获得一些java socket方面的知识和经验。我一直在发送和接收消息时遇到问题。我确实获得了一个连接,线程看起来好像正在运行,但它不会互相发送或接收消息。我不确定连接是否会在连接后自动关闭,但我知道我做错了什么,但我似乎找不到它。如果你能帮助我,那就太好了。代码如下 服务器: public class ServerGUI extends JFrame implements KeyListener{

大家好,我正在尝试创建一个小型的客户机-服务器或服务器-客户机聊天消息应用程序作为一个实验,以获得一些java socket方面的知识和经验。我一直在发送和接收消息时遇到问题。我确实获得了一个连接,线程看起来好像正在运行,但它不会互相发送或接收消息。我不确定连接是否会在连接后自动关闭,但我知道我做错了什么,但我似乎找不到它。如果你能帮助我,那就太好了。代码如下


服务器:

public class ServerGUI extends JFrame implements KeyListener{
/**
 * 
 */
private static final long serialVersionUID = 1L;
/*private JButton sendButton = new JButton("send");
private JButton connectButton = new JButton("Connect");
private JButton disconnectButton = new JButton("Disconnect");*/
private JTextField textMessage = new JTextField();
private JLabel connectMessageLabel = new JLabel("Waiting for Client");
private JTextArea messageTextArea = new JTextArea();
private JPanel buttonPanel = new JPanel();
private JPanel messageLabelPanel = new JPanel();
private JPanel messageTextAreaPanel = new JPanel();
private JPanel content = new JPanel();
private static String thisName= "<Me> ";
private static String friendLabel= "<My Friend> ";
private static JFrame serverFrame = new JFrame();
private int port= 0;
private String clientMessage=null;
private String myMessage=null;
private ServerSocket listenSocket;
private Socket connection;
private InputStream inStream;
private DataInputStream inDataStream;
private OutputStream outStream;
private DataOutputStream outDataStream;
private Thread runChatServer;

//----------------------------------------------------------------------------------------------
//-------------------------serverGui------------------------------------------------------------
@SuppressWarnings("deprecation")
public ServerGUI(int port){
    this.port = port;
    messageLabelPanel.setLayout(new GridLayout(1, 1, 1, 1));
    messageLabelPanel.add(connectMessageLabel);
    buttonPanel.setLayout(new GridLayout(1, 1, 1, 1));
    //buttonPanel.add(connectButton);
    //buttonPanel.add(sendButton);
    buttonPanel.add(textMessage);
    textMessage.addKeyListener(this);
    textMessage.setForeground(Color.BLACK);
    messageTextAreaPanel.setLayout(new BorderLayout(1, 1));
    messageTextAreaPanel.add(buttonPanel, BorderLayout.SOUTH);
    messageTextAreaPanel.add(messageLabelPanel,BorderLayout.NORTH);
    messageTextAreaPanel.add(new JScrollPane(messageTextArea),BorderLayout.CENTER);
    messageTextArea.setDisabledTextColor(Color.BLACK);
    messageTextArea.enable(false);
    content.setLayout(new GridLayout(1, 1, 1, 1));
    content.add(messageTextAreaPanel);
    content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    serverFrame.setContentPane(content);
    serverFrame.pack();
    serverFrame.setSize(450,550);
    serverFrame.setLocationRelativeTo(null);
    serverFrame.setVisible(true);
    serverFrame.setTitle("Chat Server");
    serverFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    startServer();
}

//-----------------------------------------------------------------------------------------------------
//-------------------------------keyPressed------------------------------------------------------------
public void startServer(){
    System.out.println("startServer");
    try{
        listenSocket = new ServerSocket(port);
        System.out.println("Waiting for client");
        connection = listenSocket.accept();
        System.out.println("Client Found");
        connectMessageLabel.setText("Client Found");
        runChatServer = new Thread(serverListeningAndChatting);
        runChatServer.start();
    }
    catch (Exception ex){

        System.out.println("No Connection Found");
        connectMessageLabel.setText("No Connection Found");
    }
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------listening------------------------------------------------------------
public void listening(){
    System.out.println("listening");
    try{
        inStream = connection.getInputStream();
        inDataStream = new DataInputStream(inStream);
        clientMessage = inDataStream.readUTF();
        if (clientMessage!= null){
            messageTextArea.append(clientMessage + "\n");
            clientMessage = null;
        }
    }catch(Exception ex){System.out.println(ex);}
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------sendMessage------------------------------------------------------------
public void sendMessage(){
    System.out.println("sendMessage");
    try{
        outStream = connection.getOutputStream();
        outDataStream = new DataOutputStream(outStream);

        if (myMessage!=null){
            outDataStream.writeUTF(myMessage);
            myMessage=null;
        }
    }catch(Exception ex){System.out.println("Message Failed");}
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------keyPressed------------------------------------------------------------
public void keyPressed(KeyEvent e) {
    if(e.getKeyChar() == KeyEvent.VK_ENTER){
        myMessage = friendLabel+ textMessage.getText();
        messageTextArea.append(thisName+textMessage.getText() +"\n");
        textMessage.setText("");
    }
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}

//-----------------------------------------------------------------------------------------------------
//-------------------------------main------------------------------------------------------------
public static void main (String args[]){
    new ServerGUI(8901);
}

//-----------------------------------------------------------------------------------------------------
//-------------------------------run------------------------------------------------------------
public Runnable serverListeningAndChatting = new Runnable(){
    public void run() {
        while (true){
            System.out.println("Running");
            listening();
            sendMessage();
        }
    }
};

}
公共类ServerGUI扩展JFrame实现KeyListener{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
/*私有JButton sendButton=新JButton(“发送”);
私有JButton connectButton=新JButton(“连接”);
专用JButton disconnectButton=新JButton(“断开”)*/
私有JTextField textMessage=新JTextField();
私有JLabel connectMessageLabel=新JLabel(“等待客户端”);
私有JTextArea messageTextArea=新JTextArea();
private JPanel buttonPanel=new JPanel();
private JPanel messageLabelPanel=new JPanel();
private JPanel messageTextAreaPanel=new JPanel();
private JPanel content=new JPanel();
私有静态字符串thisName=“”;
私有静态字符串friendLabel=“”;
私有静态JFrame serverFrame=新JFrame();
专用int端口=0;
私有字符串clientMessage=null;
私有字符串myMessage=null;
私有服务器套接字listenSocket;
专用插座连接;
流内私有输入流;
私有数据输入流inDataStream;
私有输出流外流;
私有数据输出流outDataStream;
私有线程运行服务器;
//----------------------------------------------------------------------------------------------
//-------------------------serverGui------------------------------------------------------------
@抑制警告(“弃用”)
公共服务器GUI(int端口){
this.port=端口;
setLayout(新的GridLayout(1,1,1,1));
messageLabelPanel.add(connectMessageLabel);
buttonPanel.setLayout(新的GridLayout(1,1,1,1));
//按钮面板。添加(连接按钮);
//按钮面板。添加(发送按钮);
按钮面板添加(文本消息);
textMessage.addKeyListener(这个);
设置前景(颜色为黑色);
messageTextAreaPanel.setLayout(新的BorderLayout(1,1));
messageTextAreaPanel.add(按钮面板,BorderLayout.SOUTH);
添加(messageLabelPanel,BorderLayout.NORTH);
添加(新的JScrollPane(messageTextArea),BorderLayout.CENTER);
messageTextArea.setDisabledTextColor(Color.BLACK);
messageTextArea.enable(false);
setLayout(新的GridLayout(1,1,1,1));
content.add(messageTextAreaPanel);
content.setboorder(BorderFactory.createEmptyBorder(10,10,10,10));
setContentPane(内容);
serverFrame.pack();
serverFrame.setSize(450550);
serverFrame.setLocationRelativeTo(空);
setVisible(true);
setTitle(“聊天服务器”);
serverFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
startServer();
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------按键------------------------------------------------------------
public void startServer(){
System.out.println(“startServer”);
试一试{
listenSocket=新服务器套接字(端口);
System.out.println(“等待客户”);
connection=listenSocket.accept();
System.out.println(“找到客户”);
connectMessageLabel.setText(“找到的客户端”);
runChatServer=新线程(serverlisteningandchating);
runChatServer.start();
}
捕获(例外情况除外){
System.out.println(“未找到连接”);
connectMessageLabel.setText(“未找到连接”);
}
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------倾听------------------------------------------------------------
公开聆听{
System.out.println(“侦听”);
试一试{
inStream=connection.getInputStream();
inDataStream=新数据输入流(流内);
clientMessage=inDataStream.readUTF();
if(clientMessage!=null){
messageTextArea.append(clientMessage+“\n”);
clientMessage=null;
}
}catch(异常ex){System.out.println(ex);}
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------发送消息------------------------------------------------------------
公共无效发送消息(){
System.out.println(“发送消息”);
试一试{
outStream=connection.getOutputStream();
outDataStream=新的DataOutputStream(扩展流);
if(myMessage!=null){
writeUTF(myMessage);
myMessage=null;
}
}catch(异常ex){System.out.println(“消息失败”);}
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------按键------------------------------------------------------------
按下公共无效键(按键事件e){
如果(例如getKeyChar()==KeyEvent.VK_ENTER){
myMessage=friendLabel+textMessage.getText();
messageTextArea.append(thisName+textMessage.getText()+“\n”);
textMessage.setText(“”);
}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
//-----------------------------------------------------------------------------------------------------
//-------------------------------主要------------------------------------------------------------
公共静态void main(字符串参数[]){
新服务器GUI(8901);
}
//---------------------------------------------------------------------
public class ClientGUI extends JFrame implements KeyListener{
/**
 * 
 */
private static final long serialVersionUID = 1L;
private JTextField textMessage = new JTextField();
private JLabel connectMessageLabel = new JLabel("Connection failed or no Server is available");
private JTextArea messageTextArea = new JTextArea();
private JPanel buttonPanel = new JPanel();
private JPanel messageLabelPanel = new JPanel();
private JPanel messageTextAreaPanel = new JPanel();
private JPanel content = new JPanel();
private static String thisName= "<Me> ";
private static String friendLabel= "<My Friend> ";
private static JFrame clientFrame = new JFrame();
private int port =0;
private String remoteMachine =null;
private String clientMessage=null;
private String myMessage=null;
private Socket connection;
private InputStream inStream;
private DataInputStream inDataStream;
private OutputStream outStream;
private DataOutputStream outDataStream;
private Thread runChatClient;
//-----------------------------------------------------------------------------------------------------
//-------------------------------ClientGUI------------------------------------------------------------

@SuppressWarnings("deprecation")
public ClientGUI(String remoteMachine, int port){
    this.port= port;
    this.remoteMachine = remoteMachine;
    messageLabelPanel.setLayout(new GridLayout(1, 1, 1, 1));
    messageLabelPanel.add(connectMessageLabel);
    buttonPanel.setLayout(new GridLayout(1, 1, 1, 1));
    //buttonPanel.add(connectButton);
    //buttonPanel.add(sendButton);
    buttonPanel.add(textMessage);
    textMessage.addKeyListener(this);
    textMessage.setForeground(Color.BLACK);
    messageTextAreaPanel.setLayout(new BorderLayout(1, 1));
    messageTextAreaPanel.add(buttonPanel, BorderLayout.SOUTH);
    messageTextAreaPanel.add(messageLabelPanel,BorderLayout.NORTH);
    messageTextAreaPanel.add(new JScrollPane(messageTextArea),BorderLayout.CENTER);
    messageTextArea.setDisabledTextColor(Color.BLACK);
    messageTextArea.enable(false);
    content.setLayout(new GridLayout(1, 1, 1, 1));
    content.add(messageTextAreaPanel);
    content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    clientFrame.setContentPane(content);
    clientFrame.pack();
    clientFrame.setSize(450,550);
    clientFrame.setLocationRelativeTo(null);
    clientFrame.setVisible(true);
    clientFrame.setTitle("Chat Client");
    clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    startClient();

}

//-----------------------------------------------------------------------------------------------------
//-------------------------------startClient------------------------------------------------------------
public void startClient(){
    System.out.println("startClient");
    try{
        System.out.println("Connecting to Server");
        connection = new Socket(remoteMachine, port);
        System.out.println("Server Found");
        connectMessageLabel.setText("Server Found");
        runChatClient = new Thread(clientListeningAndChatting);
        runChatClient.start();
    }
    catch (Exception ex){
        System.out.println("No Connection Found");
        connectMessageLabel.setText("No Connection Found");
    }

}
//-----------------------------------------------------------------------------------------------------
//-------------------------------keyPressed------------------------------------------------------------
public void keyPressed(KeyEvent e) {
    if(e.getKeyChar() == KeyEvent.VK_ENTER){
        myMessage = friendLabel+ textMessage.getText();
        messageTextArea.append(thisName+textMessage.getText() +"\n");
        textMessage.setText("");
    }
}

//-----------------------------------------------------------------------------------------------------
//-------------------------------listening------------------------------------------------------------
public void listening(){
    System.out.println("listening");
    try{
        inStream = connection.getInputStream();
        inDataStream = new DataInputStream(inStream);
        clientMessage = inDataStream.readUTF();
        if (clientMessage!= null){
            messageTextArea.append(clientMessage + "\n");
            clientMessage = null;
        }
    }catch(Exception ex){System.out.println("Disconnected");}
}
//-----------------------------------------------------------------------------------------------------
//-------------------------------sendMessage------------------------------------------------------------
public void sendMessage(){
    System.out.println("sendMessage");
    try{
        outStream = connection.getOutputStream();
        outDataStream = new DataOutputStream(outStream);
        if (myMessage!=null){
            outDataStream.writeUTF(myMessage);
            myMessage=null;
        }
    }catch(Exception ex){System.out.println("Message Failed");}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
//-----------------------------------------------------------------------------------------------------
//-------------------------------main------------------------------------------------------------
public static void main (String args[]){
    new ClientGUI(null, 8901);
}

//-----------------------------------------------------------------------------------------------------
//-------------------------------run------------------------------------------------------------
public Runnable clientListeningAndChatting = new Runnable(){

    public void run() {
        System.out.println("Running");
        while (true){
            listening();
            sendMessage();
        }
    }
};
}
listenSocket.accept();