接着上次的学习,我就去看http协议了。
学习资料(https://www.cnblogs.com/ranyonsue/p/5984001.html)
学习到这一段的时候,发现有个套接字连接概念。
然后我就去学习套接字连接是啥了。
学习资料(http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html)
教材里写的很详细,我就不再从写一遍了。
按照资料一步步下来,最后教程提出了个多客户端无法解决的问题,我自己想了下试着写了下。
服务端代码
package socketStudy;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Domain {
public static void main(String[] args) {
/*// 创建服务器端的socket对象
ServerSocket ss = new ServerSocket(5000);
// 监听连接
Socket socket = ss.accept();
// 直到连接建立好之后代码才会往下执行
System.out.println("Connected Successfully!");*/
/*System.out.println(1);
try {
System.out.println(2);
ServerSocket socket = new ServerSocket(5000);
Socket accept = socket.accept();
System.out.println("connect success.");
InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();
byte[] b=new byte[200];
int length=0;
length=inputStream.read(b);
String string = new String(b,0,length);
System.out.println(string);
outputStream.write("hello".getBytes());
outputStream.close();
inputStream.close();
accept.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
try {
ServerSocket serverSocket = new ServerSocket(5000);
List<Socket> list = new ArrayList<Socket>();
boolean isrun=true;
while(true){
Socket socket = serverSocket.accept();
list.add(socket);
int i = list.size()-1;
ServerImSocket serverImSocket = new ServerImSocket(list,i);
new ServerOuSocket(list,i,isrun);
serverImSocket.start();
isrun=false;
/*ouSocket.start();*/
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package socketStudy;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.List;
public class ServerImSocket extends Thread {
private List<Socket> socket;
private int nun;
public ServerImSocket(List<Socket> socket,int nun){
super();
this.socket=socket;
this.nun=nun;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
InputStream inputStream = socket.get(nun).getInputStream();
while (true) {
byte[] b=new byte[1024];
int length=0;
length=inputStream.read(b);
String string=new String(b,0,length);
System.out.println(string);
}
/*inputStream.close();
socket.close();*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}
package socketStudy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.List;
public class ServerOuSocket extends Thread {
private List<Socket> socket;
private int nun;
public ServerOuSocket(List<Socket> socket,int nun,boolean isrun){
if(isrun){
this.start();
System.out.println("启动获取输出");
}
this.socket=socket;
this.nun=nun;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
/*OutputStream outputStream = socket.get(nun).getOutputStream();*/
while (true) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String string = reader.readLine();
System.out.println("输入了"+string);
for (Socket socket2 : socket) {
System.out.println("循环:"+string);
OutputStream outputStream = socket2.getOutputStream();
outputStream.write(string.getBytes());
System.out.println("输出"+string);
}
}
/*inputStream.close();
socket.close();*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}
客户端代码
package socketStudy;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Domain1 {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",5000);
ImSocket imSocket = new ImSocket(socket);
OuSocket ouSocket = new OuSocket(socket);
imSocket.start();
ouSocket.start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package socketStudy;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ImSocket extends Thread {
private Socket socket;
public ImSocket(Socket socket){
super();
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
InputStream inputStream = socket.getInputStream();
while (true) {
byte[] b=new byte[1024];
int length=0;
length=inputStream.read(b);
String string=new String(b,0,length);
System.out.println(string);
}
/*inputStream.close();
socket.close();*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}
package socketStudy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.function.Supplier;
public class OuSocket extends Thread {
private Socket socket;
public OuSocket(Socket socket){
super();
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
OutputStream outputStream = socket.getOutputStream();
while (true) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String string = reader.readLine();
outputStream.write(string.getBytes());
}
/*inputStream.close();
socket.close();*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}