2

我正在尝试学习 Java,这只是我的第二天,所以如果这有点初级,我深表歉意。我正在创建一个聊天客户端,该客户端连接到我之前创建的服务器(它是用 C 编写的)。客户端程序设置为具有outTextAreainTextArea和 a sendButton(非常基本的东西,但仍然 - 降低基础知识)。我想让聊天客户端在程序打开的时候打开socket,当前打开在main(隐藏连接信息):

    Socket sock = new Socket("theServer", 0000);

我知道程序连接正确,并且保持打开状态 - 当 IP 连接到服务器时,服务器当前打印,然后在连接关闭时出现 seg 故障。

这是问题所在:当我单击时,我试图发送一个outTextArea通过该套接字输入的字符串sendButton

public void send(String outbuffer) throws Exception {
   sendButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                sendMessage sender = new sendMessage();
                sender.send(outTextArea.getText());
        }
});

sendMessage 类:

System.out.println(outbuffer);
PrintStream printer = new PrintStream(sock.getOutputStream());
printer.println(outbuffer);

这是我意识到我无法发送的地方sock,这是在main课堂上创建的。

我很好奇如何访问创建的套接字,如果有另一种发送消息的方法而无需每次都创建新连接。非常感谢任何建议,谢谢。

4

2 回答 2

1

有两种基本方法——套接字可以是一个类中的实例变量,该类同时包含套接字和使用它的方法,或者调用者可以将套接字传递给方法。在后一种情况下,该方法除了现在拥有的 String 之外还有第二个参数。还有其他可能性,但其中之一应该最适合您的情况。

如果我也可以发表一个意见:对于仍在研究变量范围和参数传递的人来说,套接字编程似乎有点先进。在尝试解决网络问题之前,您可能会尝试更简单的事情来更好地了解基础知识。

于 2013-06-06T19:46:17.063 回答
1

有很多不同的方法可以实现这一点。使用您已有的代码执行此操作的最简单和最快的方法是将套接字作为参数传递给 sendMessage 类。

Socket sock; //declare sock UP TOP so it's global

public static void main(String[] args) {
    Socket sock = new Socket("server", 0000);
    ... other stuff
}

public void send(String outbuffer) throws Exception {
    sendButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                sendMessage sender = new sendMessage(sock);
                sender.send(outTextArea.getText());
            }
        }
    });
}

然后在 sendMessage 类中,您会希望它的构造函数获取传入的套接字。

public class sendMessage {

    private Socket sock; 

    public sendMessage(Socket sock) {
        this.sock = sock;
    }

    public void send(String message) {
        ......
    }
}
于 2013-06-06T19:52:40.523 回答