下面介绍的是使用Socket实现网络通信的一个简单例子
客户端代码如下:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
public class ClientServerFrame extends JFrame {
private JPanel contentPane;
private Socket socket;
private JTextArea textArea;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ClientServerFrame frame = new ClientServerFrame();
frame.setVisible(true);
frame.connection();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ClientServerFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 449, 285);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
textArea = new JTextArea();
scrollPane.setViewportView(textArea);
}
private void connection() throws UnknownHostException
{
textArea.append("尝试链接服务器\n");
try {
socket=new Socket("202.206.212.74", 12345);
textArea.append("完成链接\n");
InetAddress address=socket.getInetAddress();
String inIP=address.getHostAddress();
int inPort=socket.getPort();//获得远程服务器地的端口
InetAddress lochostAddress=socket.getLocalAddress();
String locIp=lochostAddress.getHostAddress();
int locPort=socket.getLocalPort();
textArea.append("远程服务器地址:"+inIP+"\n");
textArea.append("远程服务器端口号:"+inPort+"\n");
textArea.append("本地客户端地址:"+locIp+"\n");
textArea.append("本地客户端端口号:"+locPort+"\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器端代码如下:
import java.awt.BorderLayout;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
public class ServerSocketFrame extends JFrame {
private JPanel contentPane;
private JTextArea textArea;
private ServerSocket server;
private Socket socket;
/**
* Launch the application.
*/
public static void main(String[] args) {
// EventQueue.invokeLater(new Runnable() {
// public void run() {
// try {
ServerSocketFrame frame = new ServerSocketFrame();
frame.setVisible(true);
frame.getServer();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// });
}
/**
* Create the frame.
*/
public ServerSocketFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
setTitle("服务器");
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
textArea= new JTextArea();
scrollPane.setViewportView(textArea);
}
public void getServer()
{
try {
server=new ServerSocket(12345);
//server.setSoTimeout(5000);//设置链接超时时间为5秒
textArea.setText("服务器建立成功\n");
while(true)
{
textArea.append("等待客户链接...\n");
socket=server.accept();
textArea.append("客户链接完成...\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
JOptionPane.showMessageDialog(null,"链接超时");
}
}
}
提示:运行时记得改下客户端的ip