学习日志2

接着上次的学习,我就去看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();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值