Socket连接不到别的主机

来源:互联网 发布:vb中的标准模块是什么 编辑:程序博客网 时间:2024/04/28 02:08

自己写了一段小程序,用来测试本机和其他主机的通信,但是一直没有成功,知道今天来学校机房,用了两台都连接上外网的主机,测试才成功,代码如下:

package Client;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;import java.net.*;public class Client  extends JFrame implements ActionListener{private JTextArea textareareceiveorsend;private JTextField textfieldtosend;private String texttosend=null;private JButton sendbutton;private Socket client;public Client(){super("Client");JPanel panel=new JPanel();setContentPane(panel);panel.setLayout(null);textareareceiveorsend=new JTextArea(">>connecting to LENOVO_PC\r\n");textareareceiveorsend.setLineWrap(true);textareareceiveorsend.setBounds(0,0, 500,300);panel.add(textareareceiveorsend);textfieldtosend=new JTextField();textfieldtosend.setBounds(50,320,400, 30);panel.add(textfieldtosend);sendbutton=new JButton("发送");sendbutton.setBounds(215,400,70, 30);sendbutton.addActionListener(this);panel.add(sendbutton);this.setSize(500,500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);connectToServer();writeTextInTextarea();}public void connectToServer(){final int PORT=4040;try {client=new Socket("219.218.21.71",PORT);textareareceiveorsend.append("connect successful\r\n");}catch (IOException e) {e.printStackTrace();}}public void writeTextInTextarea(){try{BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));while(true){String text=in.readLine();if(text.equals("byebye")){textareareceiveorsend.append(text+"\r\n");client.close();JOptionPane.showMessageDialog(this,"服务器已关闭");}else{textareareceiveorsend.append("<<"+text+"\r\n");}}}catch(IOException e){e.printStackTrace();}}public void actionPerformed(ActionEvent e){texttosend=textfieldtosend.getText();textareareceiveorsend.append(">>"+texttosend+"\r\n");textfieldtosend.setText("");PrintWriter out;try {out = new PrintWriter(client.getOutputStream(),true);out.println(texttosend);} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}}}


 

刚开始测试不成功的原因是,Socket初始化时用的ip地址是一个内网的地址,所以一直连接不上,客户端程序是不是处于内网倒是无所谓,但是服务器端程序一定要处于外网的环境中,否则就会出现连接不成功的状况。那么怎样判断自己的IP地址是不是处于外网呢?请看我的另一篇博文“怎样判断ip是不是处于外网中”。
0 0
原创粉丝点击