62,628
社区成员
发帖
与我相关
我的任务
分享package pack;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Server extends JFrame {
Vector<Socket> v = new Vector<Socket>(); // 创建存放客户端连接套接字的集合
int port;// 端口号
JTextField jtf; // 设置为属性 方便写事件的时候使用
public Server() { // 设置服务器默认窗口
this.setTitle("基于TCP协议的服务器中转聊天");
this.setSize(320, 100);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(d.width / 2 - getWidth() / 2, d.height / 2 - getHeight() / 2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
setAlwaysOnTop(true);
// 文本框 输入端口号
jtf = new JTextField();
jtf.setColumns(10);
jtf.setBounds(10, 10, 80, 30);
jtf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
if ('\n' == c) {
String s = jtf.getText();
if (s.matches("[0-9]{4,6}")) {
port = new Integer(s);
setVisible(false); // 该设置要放在服务区启动之前
server();
} else {
jtf.setText("");
JOptionPane.showMessageDialog(null, "请输入4-6位的数字!");
}
}
}
});
this.add(jtf);
// 按钮 启动服务器(事件)
JButton jb = new JButton("启动服务器");
jb.setBounds(180, 10, 100, 30);
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s = jtf.getText();
if (s.matches("[0-9]{4,6}")) {
port = new Integer(s);
setVisible(false); // 该设置要放在服务区启动之前
server();
} else {
jtf.setText("");
JOptionPane.showMessageDialog(null, "请输入4-6位的数字!");
}
}
});
this.add(jb);
}
public void server() {
// 创建服务器,病不停等待客户端连接,并将客户端连接存入集合
try {
ServerSocket s = new ServerSocket(2222);//这里的端口号“9999”是为Server端的本地端口号。
System.out.println("服务器已创建...");
while (true) {
Socket c = s.accept();// 等待客户端响应
System.out.println("客户端+[" + c.getInetAddress() + "]已连接");
v.add(c); // 将连接的客户端套接字放入集合,存放起来
// 启动转发线程
Transmit t = new Transmit(); // new一个线程实例
t.c = c; // 将连接的客户端套接字C传递给线程
t.start();
}
} catch (IOException e) {
System.out.println("服务器启动出错");
e.printStackTrace();
}
}
public class Transmit extends Thread { // 实现转发功能的线程
Socket c;
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
while (true) { // 循环读取
String s = br.readLine();
System.out.println("成功!!=========="+s);
for (Socket c : v) { // 转发给其他所有已连接的线程
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
bw.write(s + "\n");
bw.flush();
}
}
} catch (IOException e) {
System.out.println(c.getInetAddress() + "已退出");
v.remove(c);// 不执行服务器会出现问题 要经常重启
}
}
}
public static void main(String[] args) {
new Server().setVisible(true);
}
}package test0;
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TestServerSocket extends JFrame{
// JTextArea jta = new JTextArea();
JTextField jtf = new JTextField();
JTextField jtf0 = new JTextField();
JButton jb = new JButton();
// JButton jb0 = new JButton();
JPanel jp = new JPanel();
String str0;
String str1;
int port;
public TestServerSocket() {
// TODO Auto-generated constructor stub
jp.setBounds(new Rectangle(0,0,400,200));
jp.setLayout(new BorderLayout());
// jp.add(jta,BorderLayout.NORTH);
jp.add(jtf,BorderLayout.NORTH);
jp.add(jtf0,BorderLayout.SOUTH);
jp.add(jb,BorderLayout.EAST);
// jp.add(jb0,BorderLayout.WEST);
this.add(jp);
this.setBounds(new Rectangle(200,100,400,200));
this.setVisible(true);
jb.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try{
String str1 = jtf.getText();
// jta.setText(str);
String str0 = jtf0.getText();
if(str0!=""){
System.out.println("abc");
}
str1 = jtf.getText();
port = Integer.parseInt(str1);
System.out.println(str0);
System.out.println(port);Socket s = null;
try {
s = new Socket("127.0.0.1",2222);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
bw.write("Hello_World"+"\n");
WriteStr obj = new WriteStr(s,"Hello_World"+"\n");
obj.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}catch(Exception e2){
e2.printStackTrace();
}
}});
this.add(jp);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestServerSocket();
}
}
package test0;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class WriteStr extends Thread{
static Socket s = null;
BufferedWriter bw = null;
String str = null;
public WriteStr(Socket s,String str){
this.s = s;
try {
bw = new BufferedWriter(new OutputStreamWriter(this.s.getOutputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.str=str;
}
public void run(){
try {
bw.write("CJCO"+this.str);
System.out.println("++++Client端write下方++++"+this.str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

