网络编程二之TCP和UDP

网络编程二之TCP和UDP

以下代码都是先运行服务端在运行客户端

TCP简单的聊天

先创建一个tcp服务器
socket 套接字.两台计算机通信的端点.并且能指定端口号

package com.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

	public static void main(String[] args) {
		
		try {
			ServerSocket serverSocket = new ServerSocket(8786);
			System.out.println("服务器已就绪,等待客户端连接....");
			//2.服务器监听并且接受客户端的请求,如果有请求,自动建立连接,返回客户端的套接字
			Socket socket=serverSocket.accept();
			System.out.println("已连接"+socket);
			//3.获取客户端的消息
			//3.1 获取输入流
			InputStream inputStream = socket.getInputStream();
			//3.2 缓冲区,每次最多读1k的数据
			byte[] bytes = new byte[1024];
			//3.3 读取数据
			int length = inputStream.read(bytes);
			//3.4 字节数组转字符串
			String clientMsg = new String(bytes, 0, length);
			System.out.println("客户端说:" + clientMsg);
			//4.向客户端发送数据
			//4.1 获取输出流
			OutputStream outputStream = socket.getOutputStream();
			//4.2 发送内容
			byte[] bytes1 = "嗯嗯,你说的对呢".getBytes();
			//发出内容
			outputStream.write(bytes1);	
			//关闭
			socket.close();
			serverSocket.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}

}

Client客户端

package com.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
	public static void main(String[] args) {
		
		try {
			//1.创建客户端套接字,指定服务器的ip和端口号,连接服务器
			Socket socket = new Socket("127.0.0.1", 8786);
			System.out.println("已连接到"+socket);
			//2.向服务端发送数据
			//2.1输出流
			OutputStream outputStream = socket.getOutputStream();
			//2.2内容
			byte[] bytes="你真帅啊!哈哈哈".getBytes();
			//2.3 发送内容
			outputStream.write(bytes);
			System.out.println("发送:你怎么穿品如的衣服!你好sao呀!");
			
			//3.获取服务器端的数据
			//3.1输入流
			InputStream inputStream = socket.getInputStream();
			byte[] bytes1= new byte[1024];
			int length= inputStream.read(bytes1);
			String serverMsg = new String(bytes1, 0, length);
			System.out.println("服务器端说:"+serverMsg);
			socket.close();
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

UDP简单的聊天

聊天的内容写在程序里面了所以叫简单的聊天
DatagramPacket: 数据包,用于实现无连接数据投递
UDPServer 服务端

package com.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPServer {

	public static void main(String[] args) {
		//1.创建套接字
		try {
			DatagramSocket datagramSocket = new DatagramSocket(8181);
			//2.读取数据
			byte[] bytes = new byte[1024];
			
			DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
			//3.接受数据包
			datagramSocket.receive(datagramPacket);
			//4.获取数据包中的信息
			String domain = datagramPacket.getAddress().getHostName();//域名
			String ip = datagramPacket.getAddress().getHostAddress();//ip
			int port = datagramPacket.getPort();//端口
			int length = datagramPacket.getLength();//数据长度
			//打印数据
			String content = new String(bytes, 0, length);
			System.out.println("接收到来自:" + ip + "的数据:" + content );
			
			datagramSocket.close();
			
			
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

UDPClicent:udp客户端

package com.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPClicent {

	public static void main(String[] args)  {
		try {
			DatagramSocket datagramSocket = new DatagramSocket();
			//接收端ip
			InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
			//设置接收端的端口号
			int port=8181;
			//设置发送的数据
			byte[] bytes ="今天是阴天呀!没有太阳不开心!".getBytes();
			//组装数据包
			DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, inetAddress, port);
			
			//发送数据包
			datagramSocket.send(datagramPacket);
			datagramSocket.close();
			
			
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}

TCP高级进阶

tcp高级进阶就是可以在客户端输入,服务端接收,然后再在服务端输入客户端接受;
TCPProClient客户端

package com.tcpPro;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class TCPProClient {

	public static void main(String[] args) {
		
		try {
			Socket socket =new Socket("127.0.0.1", 8889);
			//安全判断
			if (socket.isConnected()) {
				System.out.println("连接到:"+socket);
			}
			DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
			DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
			Scanner scanner = new Scanner(System.in);
			while (true) {
				System.out.println("请输入:");
				String content = scanner.next();
				
				dataOutputStream.writeUTF(content);
				
				//接受服务端发送的信息
				String serverMsg = dataInputStream.readUTF();
				System.out.println("服务端说:"+serverMsg);
				if (serverMsg.equals("走你")) {
					break;
				}
			}
			dataInputStream.close();
			dataOutputStream.close();
			socket.close();
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		

	}

}

TCPProServer服务端代码

package com.tcpPro;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//API 官方文档
public class TCPProServer {

	public static void main(String[] args) {
		try {
			ServerSocket serverSocket = new ServerSocket(8889);
			System.out.println("服务器已启动,等待客户连接....");
			Socket socket = serverSocket.accept();
			System.out.println("已连接:"+socket);
			//DataInputStream 字节输入缓冲流
			DataInputStream dataInputStream =new DataInputStream(socket.getInputStream());
			DataOutputStream dataOutputStream =new DataOutputStream(socket.getOutputStream());
			//连续性的获取客户端的信息
			Scanner scanner = new Scanner(System.in);
			while (true) {
				String cilentMsg = dataInputStream.readUTF();
				System.out.println("客户端说:"+cilentMsg);
				//向客户端发送数据
				System.out.println("服务端说:");
				String serverMsg = scanner.next();
				dataOutputStream.writeUTF(serverMsg);
				if (cilentMsg.equals("走你")) {
					break;//循环结束
				}
			}
			
			dataInputStream.close();
			dataOutputStream.close();
			socket.close();
			serverSocket.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值