最近讲了些SOCKET网络编程
边学边写一个小型的聊天程序
服务器端:chatServer
package com.sun.print;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.AncestorListener;
public class ChatServer extends JFrame {
JTextArea text = new JTextArea();
JTextField msg = new JTextField();
public ChatServer() {
Container c = getContentPane();
c.add(new JScrollPane(text));
c.add(msg, BorderLayout.SOUTH);
text.setEditable(false);// 防止溢出
text.setBackground(Color.yellow);
setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
msg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendmsg();
}
});
}
protected void sendmsg() {
// TODO Auto-generated method stub
String message = msg.getText();
try {
oos.writeObject(new String("服务器:" + message + "/n"));
oos.flush();// 清空
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
text.append("服务器:" + message + "/n");
msg.setText("");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ChatServer server = new ChatServer();
server.setVisible(true);
server.runServer();
}
ObjectInputStream ois;
ObjectOutputStream oos;
private void runServer() {
// TODO Auto-generated method stub
ServerSocket ss;// 创建
try {
ss = new ServerSocket(111);
setTitle("Server");
JOptionPane.showMessageDialog(null, "连接中,请等待。。。");
text.setEditable(false);
Socket s = ss.accept();// 接收
JOptionPane.showMessageDialog(null, "连接成功!");
text.setEditable(true);
oos = new ObjectOutputStream(s.getOutputStream());
ois = new ObjectInputStream(s.getInputStream());
recieveMsg();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void recieveMsg() {
// TODO Auto-generated method stub
Object recievemsg;
try {
while ((recievemsg = ois.readObject()) != null) {
text.append(recievemsg.toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户端:chatClient
package com.sun.print;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.AncestorListener;
public class ChatClient extends JFrame {
JTextArea text = new JTextArea();
JTextField msg = new JTextField();
public ChatClient() {
Container c = getContentPane();
c.add(new JScrollPane(text));
c.add(msg, BorderLayout.SOUTH);
setSize(400, 400);
text.setEnabled(false);// 防止溢出
text.setBackground(Color.yellow);
setDefaultCloseOperation(EXIT_ON_CLOSE);
msg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendmsg();
}
});
}
private void recieveMsg() {
// TODO Auto-generated method stub
Object recievemsg;
try {
while ((recievemsg = ois.readObject()) != null) {
text.append(recievemsg.toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
protected void sendmsg() {
// TODO Auto-generated method stub
String message = msg.getText();
try {
oos.writeObject(new String("服务器:" + message + "/n"));
oos.flush();// 清空
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
text.append("服务器:" + message + "/n");
msg.setText("");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ChatClient server = new ChatClient();
server.setVisible(true);
server.runClient();
}
ObjectInputStream ois;
ObjectOutputStream oos;
private void runClient() {
ServerSocket ss;// 创建
try {
String str = JOptionPane.showInputDialog("请输入IP地址:");
text.setEditable(false);
Socket s = new Socket(str, 111);
text.setEditable(true);
oos = new ObjectOutputStream(s.getOutputStream());
ois = new ObjectInputStream(s.getInputStream());
recieveMsg();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}