java_小练习_简单实现tcp与udp

代码纯记事本书写,不保证正确

TCP

一、任务:使用tcp协议实现客户端发送数据,服务器接收并在控制台显示。
二、代码实现:

1、MyServerSocket:等待客户端连接,并将socket对象传递至ServerSocketThread类来进行交互。

class MyServerSocket{
	// 此类中创建服务器,获取客户端socket。传递至服务器线程类ServerSocketThread进行交互。
	public static void main(String[] argv)throws Exception{
		ServerSocket server = new ServerSocket(8888);// 使用8888端口
		while(true){
			Socket socket = server.accept();// 接收客户端socket
			System.out.println("新用户连接");
			new Thread(new ServerSocketThread(socket)).start();// 新建线程处理客户端
		}
	}
}

2、ServerSocketThread:处理客户端发送的消息并在控制台显示。

class ServerSocketThread implements Runnable {
	// 此类中接收客户端socket并处理
	private BufferedReader bufferedReader;// 输入流
	private PrintStream printStream;// 输出流
	private Socket socket;// 客户端
	/***
	* 构造方法初始化socket与输入输出流
	***/
	public ServerSocketThread(Socket socket){
		this.socket = socket;
		printStream = new PrintStream(socket.getOutputStream());// 获取输出流
		// 获取输入流
		bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	}

	public void run(){
		while(true){
			try{
				String str = bufferedReader.readLine();// 等待接收
				System.out.println("接收到:"+str);// 控制台显示
			}catch(Exception e){
				e.printStackTrace
			}
		}
	}
}

3、Client:客户端类进行数据的发送。

class Client{
	// 此类创建客户端并连接服务器,发送消息
	public static void main(String[] argv) throws Exception{
		Socket socket = new Socket("127.0.0.1",8888);// 链接服务器
		PrintStream printStream = new PrintStream(socket.getOutputStream());// 实例化输出流
		while(true){
			printStream.println("测试");// 输出测试 
			printStream.flush();// 刷出
			Thread.sleep(1000);// 睡眠1秒
		}
	}
}

UDP

一、任务:使用udp协议实现两用户进行数据的发送与接收
1、udp8888:使用端口8888向端口9999发送数据并使用UDP_JieShouThread类来接收数据。

class udp8888{
	// 启动8888端口作为udp端口,并发送数据	
	public static void main(String[] argv)throws Exception{
		DatagramSocket socket = new DatagramSocket(8888);
		String str = "端口8888";
		// 实例化数据包
		DatagramPacket data = new DatagramSocket(str.getBytes(),str.getBytes().lenfth(),InetAddress.getByName("localhost"),9999);
		// 启动接收线程
		new Thread(new UDP_JieShouThread(socket)).start();
		while(true){
			socket.send(data);
			Thread.sleep(1000);
		}
	}
}

2、udp9999:同1使用端口9999向端口8888发送数据并使用UDP_JieShouThread类来接收数据。

class udp9999{
	// 启动8888端口作为udp端口,并发送数据	
	public static void main(String[] argv)throws Exception{
		DatagramSocket socket = new DatagramSocket(9999);
		String str = "端口9999";
		// 实例化数据包
		DatagramPacket data = new DatagramSocket(str.getBytes(),str.getBytes().length(),InetAddress.getByName("localhost"),8888);
		// 启动接收线程
		new Thread(new UDP_JieShouThread(socket)).start();
		while(true){
			socket.send(data);
			Thread.sleep(1000);
		}
	}
}

3、UDP_JieShouThread:使用多线程接收数据并在控制台显示。

class UDP_JieShouThread implements Runnable {
	// udp接收处理。接收datagramsocket对象使用recevxxx方法接收。
	private DatagramSocket socket;
	public UDP_JieShouThread(DatagramSocket socket){
		this.socket = socket;
	}
	public void run{
		try{
			byte[] buff = new byte[1024];
			DatagramPacket data = new DatagramPacket(buff,100);
			while(true){
				socket.receive(data);
				System.out.println(new String(buff,0,data.getlength()));
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

总结:使用tcp与udp相关api简单实现了数据的收发,可在此基础上进行数据的群发,指定用户发送等练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值