从单独的方法中引用套接字

时间:2013-06-06 19:40:24

标签: java sockets networking

我正在尝试接收Java,这只是我的第二天,所以如果这有点基本,我会道歉。我正在创建一个连接到我之前创建的服务器的聊天客户端(它是用C编写的)。设置客户端程序,使其具有outTextAreainTextAreasendButton(非常基本的东西,但仍然 - 将基础知识降低)。我希望聊天客户端在打开程序时打开套接字,该程序当前在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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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) {
        ......
    }
}