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