网络编程之Tcp/IP协议

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 发送文件
 * 创建客户端
 * 1、使用服务器的地址和端口  使用Socket创建客户端
 * 2、操作:输入输出流操作
 * 3、释放资源
 * @author java
 *
 */
public class FileClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-----Client----");
		//1、使用服务器的地址和端口  使用Socket创建客户端
		Socket client = new Socket("localhost",8888);
		//2、操作:文件拷贝
		InputStream is = new BufferedInputStream(new FileInputStream("src/modelVersion.docx"));
		OutputStream os = new BufferedOutputStream(client.getOutputStream());
		byte[] flush = new byte[1024];
		int len = -1;
		while((len=is.read(flush))!=-1){
			os.write(flush,0,len);
		}
		//3、释放资源
		os.close();
		is.close();
		client.close();
	}
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 存储文件
 * 1、指定端口  使用ServerSocket创建服务器
 * 2、阻塞式等待连接accept
 * 3、操作:输入输出流操作
 * 4、释放资源
 * @author java
 *
 */
public class FileServer {
	public static void main(String[] args) throws IOException {
		System.out.println("------Server-----");
		//1、指定端口  使用ServerSocket创建服务器
		ServerSocket server = new ServerSocket(8888);
		// 2、阻塞式等待连接accept
		Socket client = server.accept();
		System.out.println("一个客户端已经建立了连接!!!");
		// 3、操作:拷贝文件
		InputStream is = new BufferedInputStream(client.getInputStream());
		OutputStream os = new BufferedOutputStream(new FileOutputStream("src/filedocx.docx"));
		byte[] flush = new byte[1024];
		int len=-1;
		while((len=is.read(flush))!=-1){
			os.write(flush,0,len);
		}
		// 4、释放资源
		os.close();
		is.close();
		client.close();
	}
}

客户端

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 创建客户端
 * 1、使用服务器的地址和端口  使用Socket创建客户端
 * 2、操作:输入输出流操作
 * 3、释放资源
 * @author java
 *
 */
public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-----Client----");
		//1、使用服务器的地址和端口  使用Socket创建客户端
		Socket client = new Socket("localhost",8888);
		//2、操作:输入输出流操作
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		String data = "编程很有趣!!!";
		dos.writeUTF(data);
		dos.flush();
		//3、释放资源
		dos.close();
		client.close();
	}
}

服务端

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 
 * 1、指定端口  使用ServerSocket创建服务器
 * 2、阻塞式等待连接accept
 * 3、操作:输入输出流操作
 * 4、释放资源
 * @author java
 *
 */
public class Server {
	public static void main(String[] args) throws IOException {
		System.out.println("------Server-----");
		//1、指定端口  使用ServerSocket创建服务器
		ServerSocket server = new ServerSocket(8888);
		// 2、阻塞式等待连接accept
		Socket client = server.accept();
		System.out.println("一个客户端已经建立了连接!!!");
		// 3、操作:输入输出流操作
		DataInputStream dis = new DataInputStream(client.getInputStream());
		String data = dis.readUTF();
		System.out.println("data:"+data);
		// 4、释放资源
		dis.close();
		client.close();
	}
}

模拟用户登陆:单向(客户端)

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 模拟用户登陆:单向
 * 创建客户端
 * 1、使用服务器的地址和端口  使用Socket创建客户端
 * 2、操作:输入输出流操作
 * 3、释放资源
 * @author java
 *
 */
public class LoginClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-----Client----");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("请输入用户名:");
		String uname = br.readLine();
		System.out.println("请输入密码:");
		String upwd = br.readLine();
		//1、使用服务器的地址和端口  使用Socket创建客户端
		Socket client = new Socket("localhost",8888);
		//2、操作:输入输出流操作
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		dos.writeUTF("uname="+uname +"&"+"upwd="+ upwd);
		dos.flush();
		//3、释放资源
		dos.close();
		client.close();
	}
}

模拟用户登陆:单向(服务端)

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 模拟用户登陆:单向
 * 1、指定端口  使用ServerSocket创建服务器
 * 2、阻塞式等待连接accept
 * 3、操作:输入输出流操作
 * 4、释放资源
 * @author java
 *
 */
public class LoginServer {
	public static void main(String[] args) throws IOException {
		System.out.println("------Server-----");
		//1、指定端口  使用ServerSocket创建服务器
		ServerSocket server = new ServerSocket(8888);
		// 2、阻塞式等待连接accept
		Socket client = server.accept();
		System.out.println("一个客户端已经建立了连接!!!");
		// 3、操作:输入输出流操作
		DataInputStream dis = new DataInputStream(client.getInputStream());
		String datas = dis.readUTF();
		System.out.println("datas:"+datas);
		String[] dataArray = datas.split("&");
		for(String data : dataArray){
			String[] dataInfo = data.split("=");
			if(dataInfo[0].equals("uname")){
				System.out.println("输入的用户名为:"+dataInfo[1]);
			}else if(dataInfo[0].equals("upwd")){
				System.out.println("输入的密码为:"+dataInfo[1]);
			}
		}
		// 4、释放资源
		dis.close();
		client.close();
	}
}

模拟用户登陆:双向(客户端)

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 模拟用户登陆:双向
 * 创建客户端
 * 1、使用服务器的地址和端口  使用Socket创建客户端
 * 2、操作:输入输出流操作
 * 3、释放资源
 * @author java
 *
 */
public class LoginTwoWayClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-----Client----");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("请输入用户名:");
		String uname = br.readLine();
		System.out.println("请输入密码:");
		String upwd = br.readLine();
		//1、使用服务器的地址和端口  使用Socket创建客户端
		Socket client = new Socket("localhost",8888);
		//2、操作:输入输出流操作
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		dos.writeUTF("uname="+uname +"&"+"upwd="+ upwd);
		dos.flush();
		//输入
		DataInputStream dis = new DataInputStream(client.getInputStream());
		String result = dis.readUTF();
		System.out.println("结果:"+result);
		//3、释放资源
		dos.close();
		client.close();
	}
}

模拟用户登陆:双向(服务端)

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 模拟用户登陆:双向
 * 1、指定端口  使用ServerSocket创建服务器
 * 2、阻塞式等待连接accept
 * 3、操作:输入输出流操作
 * 4、释放资源
 * @author java
 *
 */
public class LoginTwoWayServer {
	public static void main(String[] args) throws IOException {
		System.out.println("------Server-----");
		//1、指定端口  使用ServerSocket创建服务器
		ServerSocket server = new ServerSocket(8888);
		// 2、阻塞式等待连接accept
		Socket client = server.accept();
		System.out.println("一个客户端已经建立了连接!!!");
		// 3、操作:输入输出流操作
		DataInputStream dis = new DataInputStream(client.getInputStream());
		String datas = dis.readUTF();
		System.out.println("datas:"+datas);
		String[] dataArray = datas.split("&");
		String uname = "";
		String upwd = "";
		for(String data : dataArray){
			String[] dataInfo = data.split("=");
			if(dataInfo[0].equals("uname")){
				System.out.println("输入的用户名为:"+dataInfo[1]);
				uname = dataInfo[1];
			}else if(dataInfo[0].equals("upwd")){
				System.out.println("输入的密码为:"+dataInfo[1]);
				upwd = dataInfo[1];
			}
		}
		//输出
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		if(uname.equals("张三")&&upwd.equals("123")){
			dos.writeUTF("登陆成功!!!!");
		}else{
			dos.writeUTF("用户名或密码错误!!!");
		}
		dos.flush();
		// 4、释放资源
		dis.close();
		client.close();
	}
}

模拟多个用户登陆:双向

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 模拟多个用户登陆:双向
 * 1、指定端口  使用ServerSocket创建服务器
 * 2、阻塞式等待连接accept
 * 3、操作:输入输出流操作
 * 4、释放资源
 * @author java
 *
 */
public class LoginMultiServer {
	public static void main(String[] args) throws IOException {
		System.out.println("------Server-----");
		//1、指定端口  使用ServerSocket创建服务器
		ServerSocket server = new ServerSocket(8888);
		// 2、阻塞式等待连接accept
		boolean isRunning = true;
		while(isRunning){
			Socket client = server.accept();
			System.out.println("一个客户端已经建立了连接!!!");
			new Thread(new Channel(client)).start();
		}
	}
	
	static class Channel implements Runnable{
		private Socket client;
		private DataInputStream dis;
		private DataOutputStream dos;
		public Channel(Socket client){
			this.client = client;
			try {
				dis = new DataInputStream(client.getInputStream());
				dos = new DataOutputStream(client.getOutputStream());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				release();
			}
		}
		
		//接收数据
		private String receive(){
			String datas = "";
			try {
				datas = dis.readUTF();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return datas;
		}
		
		//发送数据
		private void send(String msg){
			try {
				dos.writeUTF(msg);
				dos.flush();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		//关闭资源
		private void release(){
			// 4、释放资源
			try {
				if(null != dos){
					dos.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(null != dos){
					dis.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(null != dos){
					client.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		@Override
		public void run() {
			// 3、操作:输入输出流操作
			String[] dataArray = receive().split("&");
			String uname = "";
			String upwd = "";
			for(String data : dataArray){
				String[] dataInfo = data.split("=");
				if(dataInfo[0].equals("uname")){
					System.out.println("输入的用户名为:"+dataInfo[1]);
					uname = dataInfo[1];
				}else if(dataInfo[0].equals("upwd")){
					System.out.println("输入的密码为:"+dataInfo[1]);
					upwd = dataInfo[1];
				}
			} 
			if(uname.equals("张三")&&upwd.equals("123")){
				send("登陆成功!!!!");
			}else{
				send("用户名或密码错误!!!");
			}
			release();
		}
	}
}

模拟模拟多个用户登陆:双向

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 模拟模拟多个用户登陆:双向
 * 创建客户端
 * 1、使用服务器的地址和端口  使用Socket创建客户端
 * 2、操作:输入输出流操作
 * 3、释放资源
 * @author java
 *
 */
public class LoginMultiClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("-----Client----");
		//1、使用服务器的地址和端口  使用Socket创建客户端
		Socket client = new Socket("localhost",8888);
		//2、操作:输入输出流操作
		new Send(client).send();
		//输入
		new Receive(client).receive();
		client.close();
	}
	
	static class Send{
		private DataOutputStream dos;
		private Socket client;
		private BufferedReader br;
		private String msg;
		public Send(Socket client){
			br= new BufferedReader(new InputStreamReader(System.in));
			this.msg = init();
			this.client = client;
			try {
				dos= new DataOutputStream(client.getOutputStream());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		public void send(){
			try {
				dos.writeUTF(msg);
				dos.flush();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		public String init(){
			System.out.println("请输入用户名:");
			String uname = "";
			String upwd = "";
			String msg = "";
			try {
				uname = br.readLine();
				System.out.println("请输入密码:");
				upwd = br.readLine();
				msg = "uname="+uname +"&"+"upwd="+ upwd;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return msg;
		}
	}
	
	static class Receive{
		private Socket client;
		private DataInputStream dis;
		public Receive(Socket client){
			this.client = client;
			try {
				dis = new DataInputStream(client.getInputStream());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		public String receive(){
			String result = "";
			try {
				result = dis.readUTF();
				System.out.println("结果:"+result);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return result;
		}
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值