Java Server总是返回相同的消息

时间:2015-11-20 10:24:24

标签: java serversocket

这是我第一次进行Socket编程,我制作了一个客户端程序和一个Server程序,服务器只是向客户端发送一条简单的消息。 问题是,当我更改消息时,它将再次显示旧消息。

这是客户

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.util.*;
public class Client extends JFrame {

public static final int  PORT = 49998;

    Client(){
        JFrame window = new JFrame();
        JPanel thePanel = new JPanel();
        JTextField txt = new JTextField(20);
        JButton btn = new JButton("Send");

        window.add(thePanel);
        thePanel.add(txt);
        thePanel.add(btn);

        window.setSize(400,400);
        window.setDefaultCloseOperation(EXIT_ON_CLOSE);
        window.setTitle("Client");
        window.setVisible(true);
    }


    public static void main(String[] args){     
        new Client();

        Socket conect;
        String ip;
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter you're IP adress: ");
        ip = sc.nextLine();

        try{
            conect = new Socket(ip,PORT);
            BufferedReader read = new BufferedReader(
                new InputStreamReader    (conect.getInputStream()));
            String line = read.readLine();
            if(line == null){
                System.out.println("Error reading from server");
            }
            System.out.println();
            System.out.println(line);
            read.close();
        }catch(IOException e){
            System.out.println("Can't connect to server");
        }
    }
}

这是服务器

import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Server {

    static PrintWriter pw;

    Server(){

        JFrame window = new JFrame();
        JPanel thePanel = new JPanel();
        JTextField txt = new JTextField(20);
        JButton btn = new JButton("Send");

        window.add(thePanel);
        thePanel.add(txt);
        thePanel.add(btn);

        window.setSize(400,400);
        window.setTitle("Server");
        window.setVisible(true);

    }

    public static void main(String[] args){

        new Server();

        ServerSocket server;
        Socket connection;
        int port = 49998;

        try{
            server = new ServerSocket(port);
            while(true){
                connection = server.accept();
                sendMsg(connection);
            }           
        }catch(IOException e){
            System.out.println("Problem connection to client");
        }

    }

    public static void sendMsg(Socket con){

        try{
            pw = new PrintWriter(
                con.getOutputStream());
            pw.println(" this actually work");

//这是消息,如果我改变它的内容它不再工作,除非我改变端口                 pw.flush();                 pw.close();             } catch(IOException e){                 System.out.print(“同意客户端的错误”);             }         }

}

我还没有对JFrame做任何事情,所以不要注意它。

2 个答案:

答案 0 :(得分:1)

我测试了你的代码,它适用于我。

我的意思是......根据您发布的代码,我假设您正在更改源代码中的消息并重新启动服务器,对吧?

我怀疑你刚刚没有停止你的第一个服务器进程,以便它保持端口忙,并且它会一直响应。

这就是我的所作所为:

  1. 编译服务器(您的代码不变)
  2. 编译客户端(您的代码不变)
  3. 在命令提示符下运行server(打开控制台并运行java Server)
  4. 在不同的命令提示符下运行客户端(打开控制台并运行java客户端)
  5. 客户端控制台中的
  6. 按要求插入IP地址(127.0.0.1)
  7. 客户端控制台显示"那些实际工作"
  8. 停止客户端(客户端控制台上的Ctrl-C)
  9. 停止服务器(服务器控制台上的Ctrl-C)
  10. 编辑Server.java:修改服务器的消息("那些实际工作" - >"不同消息")并保存
  11. 编译服务器
  12. 重复步骤3至5
  13. 客户端控制台显示"不同消息"
  14. 我怀疑你错过了第8步......你能仔细检查吗? (在这种情况下,您应该看到消息"与客户端的问题连接"在服务器控制台中)

答案 1 :(得分:0)

关闭一切。应用程序告诉操作系统它将侦听特定端口......直到它关闭。

    try (ServerSocket server = new ServerSocket(port)) {
        while (true) {
            try (Socket connection = server.accept()) {
                sendMsg(connection);
            } catch (IOException e) {
                System.out.println("Problem connection to client");
            }
        }           
    } catch (IOException e) {
        System.out.println("Problem connection for server");
    }

try-with-resources将负责关闭。