Day20:TCP、InetAddress、守护线程

TCP-套接字编程

###1.客户端与服务器通信

客户端
public class Client {

	public static void main(String[] args) throws UnknownHostException, IOException {
		
		Socket socket = new Socket("127.0.0.1",9999);
		
		//1.向服务端发送请求
		PrintStream ps = new PrintStream(socket.getOutputStream());
		ps.println("服务器你好,我是客户端!");
		
		//4.接收来自服务器的信息
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String readLine = br.readLine();
		System.out.println(readLine);
		
		ps.close();
		br.close();
		socket.close();
	}
}
服务器
public class Server {

	public static void main(String[] args) throws IOException {
		
		ServerSocket server = new ServerSocket(9999);
		Socket socket = server.accept();
		System.out.println("连接已建立");
		
		//2.接收来自客户端的信息
		BufferedReader bf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String readLine = bf.readLine();
		System.out.println(readLine);
		
		//3.向客户端回复信息
		PrintStream ps = new PrintStream(socket.getOutputStream());
		ps.println("客户端你好,我是服务器!");
		
		bf.close();
		ps.close();
		
	}
}

###2.客户端登录

客户端

public class Client {
	/**
	 * 
	 * 
	 * PrintStream和BufferedReader
	 * 
	 */

	public static void main(String[] args) throws UnknownHostException, IOException {
		//建立连接
		Socket socket = new Socket("127.0.0.1",9999);
		
		//1.向客户端发送账号密码
		PrintStream ps = new PrintStream(socket.getOutputStream());
		Scanner scan = new Scanner(System.in);
		String username = scan.next();
		String password = scan.next();
		ps.println(username);
		ps.println(password);
		scan.close();
		
		//4.显示登录结果
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String readLine = br.readLine();
		if("1".equals(readLine)) {
			System.out.println("登录成功!");
		}else if("-1".equals(readLine)){
			System.out.println("登录失败!");
		}
		ps.close();
		br.close();
		socket.close();
		
	}
}
服务器

public class Server {

	public static void main(String[] args) throws Exception {
		
		Socket socket = new ServerSocket(9999).accept();
		System.out.println("连接建立");
		
		//2.接收客户端发送的账号密码
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String username = br.readLine();
		String password = br.readLine();
		String flag=null;
		if("yl".equals(username)&&"123".equals(password)) {
			flag="1";
		}else {
			flag="-1";
		}
		
		//3.登录结果返回给客户端
		PrintStream ps = new PrintStream(socket.getOutputStream());
		ps.println(flag);
		
		br.close();
		ps.close();
		socket.close();
		
		
	}
}

 

###3.客户端注册

客户端

public class Client {
	/**
	 * 
	 * 注册
	 * 使用ObjectOutpuStream和ObjectInputStream
	 * 
	 */

	public static void main(String[] args) throws UnknownHostException, IOException {
		//建立连接
		Socket socket = new Socket("127.0.0.1",9999);
		
		//1.向客户端发送注册信息
		ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
		Scanner scan = new Scanner(System.in);
		String username = scan.next();
		String password = scan.next();
		String sex = scan.next();
		int age = scan.nextInt();
		oos.writeObject(new User(username, password, sex, age));
		scan.close();
		
		//4.显示登录结果
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String readLine = br.readLine();
		if("1".equals(readLine)) {
			System.out.println("注册成功!");
		}else if("-1".equals(readLine)){
			System.out.println("注册失败!");
		}
		oos.close();
		br.close();
		socket.close();
		
	}
}
服务器

public class Server {

	public static void main(String[] args) throws Exception {
		
		Socket socket = new ServerSocket(9999).accept();
		System.out.println("连接建立");
		
		//2.接收客户端发送的账号密码
		ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
		User user = (User) ois.readObject();
		String flag=null;
		if("yl".equals(user.getUsername())) {
			flag="-1";
		}else {
			flag="1";
		}
		
		//3.登录结果返回给客户端
		PrintStream ps = new PrintStream(socket.getOutputStream());
		ps.println(flag);
		
		ois.close();
		ps.close();
		socket.close();
		
		
	}
}
用户类

public class User implements Serializable{

	private static final long serialVersionUID = 6071568800851323264L;
	private String username;
	private String password;
	private String sex;
	private int age;
	
	public User() {
	}

	public User(String username, String password, String sex, int age) {
		this.username = username;
		this.password = password;
		this.sex = sex;
		this.age = age;
	}

	/**
	 * @return username
	 */
	public String getUsername() {
		return username;
	}

	/**
	 * @param username 要设置的 username
	 */
	public void setUsername(String username) {
		this.username = username;
	}

	/**
	 * @return password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * @param password 要设置的 password
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * @return sex
	 */
	public String getSex() {
		return sex;
	}

	/**
	 * @param sex 要设置的 sex
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}

	/**
	 * @return age
	 */
	public int getAge() {
		return age;
	}

	/**
	 * @param age 要设置的 age
	 */
	public void setAge(int age) {
		this.age = age;
	}

	/**
	 * @return serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	/* (非 Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", age=" + age + "]";
	}
	
	
}

 

###4.客户端上传文件

客户端

public class Client {
	
	public static void main(String[] args) throws UnknownHostException, IOException {
		//建立连接
		Socket socket = new Socket("127.0.0.1",9999);
		//传送文件
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("破冰行动.mkv"));
		BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
		
		//写入
		byte[] b = new byte[1024];
		int len;
		while((len = bis.read(b))!=-1) {
			bos.write(b);
		}
		
		bis.close();
		bos.close();
		socket.close();
		
		
	}
}
服务器

public class Server {

	public static void main(String[] args) throws Exception {
		//建立连接
		ServerSocket server = new ServerSocket(9999);
		Socket socket = server.accept();
		
		BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("破冰行动-副本.mkv"));
		byte[] b = new byte[1024];
		int len;
		while((len = bis.read(b))!=-1) {
			bos.write(b);
		}
		
		bis.close();
		bos.close();
		socket.close();
		
	}
}

 

InetAddress

public class Test01 {

	public static void main(String[] args) throws UnknownHostException {
		//获取域名对应的IP地址
//		InetAddress name = InetAddress.getByName("www.CSDN.com");
//		System.out.println(name);
		
		//获取域名的所有IP地址
//		InetAddress[] allByName = InetAddress.getAllByName("www.CSDN.com");
//		for(InetAddress a:allByName) {
//			System.out.println(a);
//		}
		
		//获取本机IP地址
		InetAddress localHost = InetAddress.getLocalHost();
		System.out.println(localHost);
		
	}
}

 

守护线程

守护线程是为我们前端线程服务的,我们自己创建了一个线程,当我们这个线程执行结束之后,守护线程将会自动结束

public class Test01 {

	public static void main(String[] args) {
		//守护线程/后台线程:默默守护着前台线程,等所有的前台线程都销毁后,守护线程就会默默的销毁
		// 垃圾回收器就是个守护线程
		MyThread t1 = new MyThread();
		t1.setDaemon(true);//设置此线程为守护线程
		t1.start();
		for(int i=1;i<6;i++) {
			System.out.println("我是主线程"+i);
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}
}
class MyThread extends Thread{
	@Override
	public void run() {
		while(true) {
			System.out.println("我是守护线程!");
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值