简介
服务器代码
package demo0811.demo3;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 使用多线程写一个服务器,端口 为9999
* @author zzw
*
*/
public class ServerMain {
public static ArrayListports=new ArrayList();
public static ArrayListstreams=new ArrayList();
public static void main(String[] args) {
try(ServerSocket server=new ServerSocket(9999)) {
System.out.println(“服务器正在运行”);
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(50);
while(true) {
Socket socket = server.accept();
int port = socket.getPort();
OutputStream outputStream = socket.getOutputStream();
ports.add(port);
streams.add(outputStream);
newFixedThreadPool.submit(new SocketRunnable(socket,outputStream));
newFixedThreadPool.submit(new NotifyNewersRunnable(port));
}
} catch (Exception ex) {
System.out.println(“无法建立监听服务!”);
ex.printStackTrace();
}
}
}
package demo0811.demo3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Date;
public class SocketRunnable implements Runnable {
private Socket socket;
private OutputStream outputStream;
public SocketRunnable(Socket socket,OutputStream outputStream) {
this.socket=socket;
this.outputStream=outputStream;
}
@Override
public void run() {
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
Date date = new Date();
outputStreamWriter.write(date.toString()+”n如发私信,请使用[port]开头”+”rn”);
outputStreamWriter.flush();
int port = socket.getPort();
while(true) {
if(socket.isConnected()) {
InputStream inputStream = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream,”UTF-8″);
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
while((line=bufferedReader.readLine())!=null) {
if(line.startsWith(“[“)) {
int end=line.indexOf(‘]’);
int target=Integer.parseInt(line.substring(1, end));
int indexOf = ServerMain.ports.indexOf(target);
if(end
OutputStreamWriter outputStreamWriter2 =
new OutputStreamWriter(ServerMain.streams.get(ServerMain.ports.indexOf(port)),”UTF-8″);
outputStreamWriter2.write(“您的私信格式输入有误或端口 不存在!rn”);
outputStreamWriter2.flush();
} else {
OutputStreamWriter outputStreamWriter2 =
new OutputStreamWriter(ServerMain.streams.get(indexOf),”UTF-8″);
outputStreamWriter2.write(“端口”+port+”私信:”+line.substring(end+1)+”rn”);
outputStreamWriter2.flush();
}
} else {
for(int i=0;i
package demo0811.demo3;
import java.io.IOException;
public class NotifyNewersRunnable implements Runnable{
private int port;
public NotifyNewersRunnable(int port) {
this.port = port;
}
@Override
public void run() {
int n;
String str=”端口”+port+”上线了rn”;
if((n=ServerMain.streams.size())>1) {
for(int i=0;i
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92479 人正在系统学习中 相关资源:软件测试群软件测试群软件测试群软件测试群_测试群-其它文档类…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!