首先是服务器端代码:
package 聊天程序服务器;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyServer {
private BufferedReader reader;
private PrintWriter writer;
private ServerSocket server;
private Socket socket;
private JFrame frame;
private Container container;
private JTextArea ta=new JTextArea();
private JTextField tf=new JTextField();
private JScrollPane sp=new JScrollPane();
public void GetServer()
{
try{
frame=new JFrame("服务器");
container=frame.getContentPane();
container.setLayout(new BorderLayout());
sp.setViewportView(ta);
container.add(sp, BorderLayout.CENTER);
container.add(tf,BorderLayout.SOUTH);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
server=new ServerSocket(80); //此处为端口号
System.out.println("服务器套接字已连接");
tf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
writer.println(tf.getText());
ta.append("服务器:"+tf.getText()+'\n');
tf.setText("");
}
}
);
while(true)
{
System.out.println("等待客户端连接...");
socket=server.accept();
writer=new PrintWriter(socket.getOutputStream(),true);
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(reader!=null)
{
ta.append("客户端:"+reader.readLine()+'\n');
}
}
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
MyServer myserver=new MyServer();
myserver.GetServer();
}
}
客户端代码:
package 聊天程序客户端;
import java.io.*;
import java.awt.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyClient extends JFrame {
private PrintWriter writer;
private BufferedReader reader;
private Socket socket;
private JTextArea ta=new JTextArea();
private JTextField tf=new JTextField();
private JScrollPane sp=new JScrollPane();
private Container container;
public MyClient(String title)
{
super(title);
container=this.getContentPane();
container.setLayout(new BorderLayout());
sp.setViewportView(ta);
container.add(sp, BorderLayout.CENTER);
container.add(tf, BorderLayout.SOUTH);
tf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
writer.println(tf.getText());
ta.append("客户端:"+tf.getText()+'\n');
tf.setText("");
}
}
);
this.setSize(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void connect()
{
try{
socket=new Socket("×××",80); //×××为服务器的IP地址
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(),true);
ta.append("连接成功\n");
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
MyClient myclient=new MyClient("客户端");
myclient.connect();
while(true)
{
try{myclient.ta.append("服务器:"+myclient.reader.readLine()+'\n');
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
如果要实现局域网内互联,服务器IP地址可以就写内网IP地址,即192.168之类的。如果要实现广域网内连接,IP地址要填写外网IP地址,并且做内网映射,否则会连接失败。
我的博客:矩阵空间
版权声明:本文为QianYiYu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。