📄 serversocketone.java
字号:
package net.server;
import java.awt.TextField;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import net.client.Client;
public class ServerSocketOne {
ServerSocket socket;
Socket so;
boolean being;
boolean be;
Client c;
int ii = 0;
BufferedReader br;
FileReader file;
/**
* 要开启的服务器端口号
*/
int port;
// 保存客户端
List<Client> client = new ArrayList<Client>();
// DataInputStream dis;
String test;
Server server;
public ServerSocketOne(Server server) {
this.server = server;
readPort();
server();
}
/* 读入端口号 */
private void readPort() {
try {
file = new FileReader("port.txt");
br = new BufferedReader(file);
} catch (FileNotFoundException e1) {
JOptionPane.showMessageDialog(null,"系统找不到port.txt文件!","加载错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
e1.printStackTrace();
}
try {
port = Integer.parseInt(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
/* 测试网络 */
public String Test() {
if (client.size() > 0) {
test = "测试成功!";
} else {
test = "测试失败!!";
}
return test;
}
public void server() {
try {
socket = new ServerSocket(port);
server.textArea.append("开启服务器"+"\n");
being = true;
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
while (being) {
try {
so = socket.accept();
c = new Client(so);
client.add(c);
new Thread(c).start();
/* System.out.println("一客户连上123"); */
server.textArea.append("以客户端连上"+"\n");
} catch (SocketException e) {
/* System.out.println("Socket is closed"); */
} catch (IOException e) {
e.printStackTrace();
}
}
}
/* 关闭server */
public void close() {
for (int i = 0; i < client.size(); i++) {
Client c = client.get(i);
c.closes();
System.out.println("nihao");
}
try {
if (so != null)
so.close();
if (socket != null) {
socket.close();
}
} catch (IOException e) {
//e.printStackTrace();
}
}
private class Client implements Runnable {
Socket so = null;
String ss;
DataInputStream dis = null;
DataOutputStream dos = null;
public Client(Socket so) {
this.so = so;
try {
dis = new DataInputStream(so.getInputStream());
dos = new DataOutputStream(so.getOutputStream());
System.out.println("一客户连上.1");
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
// 关闭server
public void closes() {
try {
// t.stop();
if (so != null)
so.close();
if (dis != null)
dis.close();
if (dos != null)
dos.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
//e.printStackTrace();
}
}
/*
* 群发信息 public void rends(String st){
* System.out.println("有几个用户."+client.size()); for(int i=0;i<client.size();i++){
* Client c =client.get(i); c.rend(ss); } }
*/
public void rends(String st) {
/* System.out.println("有几个用户."+client.size()); */
for (int i = 0; i < client.size(); i++) {
ii = i;
Client c = client.get(i);
if(this == c){
}else{
c.rend(st);
}
}
}
/* 单发信息 */
public void rend(String st) {
try {
dos.writeUTF(st);
} catch (SocketException e) {
client.remove(ii);
//System.out.println("对不起,Socket closed");
server.textArea.append("一客户退出!"+"\n");
} catch (IOException e) {
client.remove(ii);
System.out.println("这个数十" + ii);
e.printStackTrace();
}
}
public void run() {
while (true) {
try {
ss = dis.readUTF();
server.textArea.append(ss+"\n");
rends(ss);
} catch (IOException e) {
// TODO 自动生成 catch 块
try {
if (dis != null)
dis.close();
if (so != null)
so.close();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}/*
* finally{
*
* try { if(dis != null) dis.close(); if(so != null)
* so.close(); } catch (IOException e1) { // TODO 自动生成 catch
* 块 e1.printStackTrace(); } }
*/
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -