package wan;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class TomcatImp {
private boolean shutdown=false;
private Map<String,Socket> clients=new HashMap<>();
private List<Socket> cList=new ArrayList<>();
public void openServer() {
try {
ServerSocket serverSocket=new ServerSocket(8088,2,InetAddress.getByName("127.0.0.1"));
Socket socket=null;
InputStream inputStream=null;
OutputStream outputStream=null;
while(!shutdown){
StringBuffer http=new StringBuffer();
socket=serverSocket.accept();
outputStream=socket.getOutputStream();
inputStream=socket.getInputStream();
byte[] bytes=new byte[1024];
int i=inputStream.read(bytes);//会吧http请求全部读出放到byte数组里面,i为字符长度,一个byte存一个字符
System.out.println("我倒要看看这个读取出来的是什么:"+i);
System.out.println("读出的byte:"+bytes);
for(int j=0;j<i;j++) {
http.append((char)bytes[j]);//在byte数组中的二进制数据自动变成了十进制数据,一个一个把他强转成char组成string
}
System.out.println("http:"+http);
String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +
"Content-Type: text/html\r\n" +
"Content-Length: 35\r\n" +
"\r\n" +
"<h1>hi hello world</h1><br>";
outputStream.write(errorMessage.getBytes());//调戏客户端
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String errorMessage2 =
"love you too";
outputStream.write(errorMessage2.getBytes());//调戏客户端
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//多人聊天服务
private void qqServer() {
SubThread subThread=new SubThread();
subThread.start();
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8099,10,InetAddress.getByName("127.0.0.1"));
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(!shutdown){
try {
Socket socket=serverSocket.accept();
clients.put(socket.getPort()+"*"+socket.getInetAddress(), socket);
cList.add(socket);
byte[] bs=new byte[2048];
int i=socket.getInputStream().read(bs);
System.out.println(+socket.getPort()+":"+socket.getInetAddress()+"conn-msg:"+new String(bs,0,i));
socket.getOutputStream().write(("欢迎加入聊天,我吃妳==》"+socket.getPort()+":"+socket.getInetAddress()+"").getBytes());
ForwordMsgThread thread=new ForwordMsgThread(socket);
thread.start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private String sendMsgToAll() {
System.out.println("please input message:");
Scanner scanner=new Scanner(System.in);
String msgString=scanner.nextLine();
return msgString;
}
//获取浏览器url
private String getUrl(String s) {
return "";
}
//监听每个客户端的消息并发送给其他客户端
class ForwordMsgThread extends Thread{
private Socket socket0=null;
public ForwordMsgThread(Socket socket) {
socket0=socket;
}
@Override
public void run() {
while(true){
byte[] b=new byte[1024];
try {
int i=socket0.getInputStream().read(b);
System.out.println(new String(b,0,i));
for(Map.Entry<String, Socket> entry:clients.entrySet()) {
if(entry.getKey()!=socket0.getPort()+"*"+socket0.getInetAddress()) {
entry.getValue().getOutputStream().write(new String(b,0,i).getBytes());
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class SubThread extends Thread{
@Override
public void run() {
while(true) {
String msg=sendMsgToAll();
for(Socket socket:cList) {
try {
socket.getOutputStream().write(msg.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
}
}
}
public static void main(String [] args) {
TomcatImp tomcat=new TomcatImp();
//tomcat.openServer();
tomcat.qqServer();
}
}
、、、、、、、、、、、、、 d.ngrok.xiaomiqiu.cn/vv 、好看的、、、、、、、、、、、、、、、、、、、、、、、、
package wan;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class Cli {
private static Socket socket=null;
public static void main(String[] args) {
try {
socket=new Socket(InetAddress.getByName("127.0.0.1"),8099);
Cli.InputThread thread=new Cli().new InputThread(socket);
thread.start();
socket.getOutputStream().write("love you".getBytes());
InputStream inputStream= socket.getInputStream();
StringBuffer stringBuffer=new StringBuffer();
byte[] b=new byte[1024];
int i=inputStream.read(b);
for(int j=0;j<i;j++) {
stringBuffer.append((char)b[j]) ;
}
System.err.println(stringBuffer);
System.out.println(new String(b,0,i,"utf-8"));
while(true) {
byte[] b2=new byte[1024];
int i2=inputStream.read(b2);
System.out.println(new String(b2,0,i2,"UTF-8"));
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class InputThread extends Thread{
Socket socket0=null;
public InputThread(Socket socket) {
socket0=socket;
}
@Override
public void run() {
while(true) {
Scanner scanner=new Scanner(System.in);
String mString=scanner.nextLine();
try {
socket0.getOutputStream().write(mString.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}