Java网络编程:TCP和UDP

本文通过两个实例介绍如何使用Java进行TCP和UDP网络编程。首先,我们实现了一个简单的TCP服务器和客户端,服务器监听5000端口并响应客户端连接,向客户端发送问候消息。接着,我们展示了UDP服务器和客户端的工作流程,UDP服务器监听8000端口,接收客户端发送的数据,并返回带有计数的消息。

TCP:

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

public class J_Server {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		try {
			ServerSocket server=new ServerSocket(5000);
			while(true)
			{
				Socket s=server.accept();
				System.out.println("服务器端接收连接");
				DataOutputStream dataOut=new DataOutputStream(s.getOutputStream());
				dataOut.writeUTF("来自服务器端的问候");
				dataOut.close();
				s.close();
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.DataInputStream;

public class J_Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		try {
			Socket s=new Socket("localhost",5000);
			DataInputStream dataIn=new DataInputStream(s.getInputStream());
			System.out.println("客户端接收:"+dataIn.readUTF());
			dataIn.close();
			s.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

UDP:

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.net.InetAddress;

public class J_UdpServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		DatagramSocket dSocket;
		DatagramPacket inPacket;
		DatagramPacket outPacket;
		InetAddress cAddr;
		int cPort;
		int count=0;
		
		try {
			dSocket=new DatagramSocket(8000);
			while(true)
			{
				count++;
				
				inPacket=new DatagramPacket(new byte[100],100);
				dSocket.receive(inPacket);	//接收数据包,存入inPacket
				cAddr=inPacket.getAddress();
				cPort=inPacket.getPort();
				String s = new String(inPacket.getData(),0,inPacket.getData().length);
				
				System.out.println("第"+count+"台设备接入");
				System.out.println("Message:"+s);
				System.out.println("ClientAddr:"+cAddr.getHostName());
				System.out.println("ClientPort:"+cPort);
				
				String outData="returnback_"+String.valueOf(count);
				
				outPacket=new DatagramPacket(outData.getBytes(),outData.getBytes().length,cAddr,cPort);
				dSocket.send(outPacket);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.net.InetAddress;

public class J_UdpClient {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		DatagramSocket dSocket;
		DatagramPacket inPacket;
		DatagramPacket outPacket;
		InetAddress sAddr;		
		
		try {
			dSocket=new DatagramSocket();
			sAddr=InetAddress.getByName("localhost");
			String outData="请求连接...";
			outPacket=new DatagramPacket(outData.getBytes(),outData.getBytes().length,sAddr,8000);
			dSocket.send(outPacket);	//发送数据包
			

				inPacket=new DatagramPacket(new byte[100],100);
				dSocket.receive(inPacket);	//接收数据包,存入inPacket
				
				String s = new String(inPacket.getData(),0,inPacket.getData().length);
				
				System.out.println("Message:"+s);
				System.out.println("ServerAddr:"+inPacket.getAddress().getHostName());
				System.out.println("ServerPort:"+inPacket.getPort());
				dSocket.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值