注意:此代码完全是以入门水平为标准,内部有许多值得优化的地方,但作为了解TCP/UDP的功能还是可以的。
实际代码一定要进行优化,至少要启用线程。
UDP的实现部分 原文: http://www.java2000.net/p10504
接收代码
发送代码
TCP的实现部分 原文: http://www.java2000.net/p10506
接收代码
发送代码
实际代码一定要进行优化,至少要启用线程。
UDP的实现部分 原文: http://www.java2000.net/p10504
接收代码
- package chat;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /**
- * UDP 接收数据的代码。
- *
- * @author 赵学庆 www.java2000.net
- */
- public class UDPReceiveTest {
- void display() {
- byte buf[] = new byte[256];
- DatagramPacket sPacket;
- DatagramPacket rPacket;
- DatagramSocket socket;
- int count;
- byte[] res = "OK".getBytes();
- try {
- socket = new DatagramSocket(8888);
- while (true) {
- rPacket = new DatagramPacket(buf, buf.length);
- // 接收数据报
- socket.receive(rPacket);
- // 获取发送方的地址
- InetAddress addr = rPacket.getAddress();
- // 获取发送方的端口
- int port = rPacket.getPort();
- count = rPacket.getLength();
- System.out.println("接收到来自 " + addr.getHostAddress() + " 数据:");
- System.out.println(new String(buf, 0, count));
- // 发送数据报
- sPacket = new DatagramPacket(res, res.length, addr, port);
- socket.send(sPacket);
- }
- } catch (Exception e) {
- System.out.println(e);
- }
- }
- public static void main(String[] args) {
- UDPReceiveTest app = new UDPReceiveTest();
- app.display();
- }
- }
- package chat;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /**
- * UDP 发送数据的代码。
- *
- * @author 赵学庆 www.java2000.net
- */
- public class UDPSendTest {
- public static void main(String[] args) {
- UDPSendTest app = new UDPSendTest();
- app.display();
- }
- void display() {
- byte buf[] = new byte[256];
- DatagramPacket sPacket;
- DatagramPacket rPacket;
- DatagramSocket socket;
- int count;
- byte[] host = new byte[128];
- try {
- socket = new DatagramSocket();
- // 输入目的方的主机名
- System.out.print("请输入目的方的主机名: ");
- count = System.in.read(host);
- InetAddress addr = InetAddress.getByName(new String(host, 0, count - 2));
- while (true) {
- System.out.print("请输入要发送的数据: ");
- count = System.in.read(buf);
- // 发送数据报
- sPacket = new DatagramPacket(buf, count - 2, addr, 8888);
- socket.send(sPacket);
- // 接收数据报
- rPacket = new DatagramPacket(buf, buf.length);
- socket.receive(rPacket);
- System.out.print("返回信息: ");
- String str = new String(rPacket.getData(), 0, rPacket.getLength());
- System.out.println(str);
- }
- } catch (Exception e) {
- System.out.println(e);
- }
- }
- }
TCP的实现部分 原文: http://www.java2000.net/p10506
接收代码
- package chat;
- import java.io.BufferedReader;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- * TCP 接收数据的代码。
- *
- * @author 赵学庆 www.java2000.net
- */
- public class TCPReceiveTest {
- void display() {
- ServerSocket socket;
- try {
- socket = new ServerSocket(8888);
- while (true) {
- Socket s = socket.accept();
- InputStream is = s.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- PrintWriter out = new PrintWriter(s.getOutputStream());
- String line = reader.readLine();
- System.out.println("接收到来自 " + s.getRemoteSocketAddress() + " 数据:");
- System.out.println(line);
- out.print("OK");
- out.flush();
- out.close();
- reader.close();
- s.close();
- }
- } catch (Exception e) {
- System.out.println(e);
- }
- }
- public static void main(String[] args) {
- TCPReceiveTest app = new TCPReceiveTest();
- app.display();
- }
- }
发送代码
- package chat;
- import java.io.BufferedReader;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.InetAddress;
- import java.net.Socket;
- /**
- * TCP 发送数据的代码。
- *
- * @author 赵学庆 www.java2000.net
- */
- public class TCPSendTest {
- public static void main(String[] args) {
- TCPSendTest app = new TCPSendTest();
- app.display();
- }
- void display() {
- Socket s;
- byte buf[] = new byte[256];
- int count;
- byte[] host = new byte[128];
- try {
- // 输入目的方的主机名
- System.out.print("请输入目的方的主机名: ");
- count = System.in.read(host);
- InetAddress addr = InetAddress.getByName(new String(host, 0, count - 2));
- while (true) {
- System.out.print("请输入要发送的数据: ");
- count = System.in.read(buf);
- // 发送数据报
- s = new Socket(addr.getHostAddress(), 8888);
- InputStream is = s.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- PrintWriter out = new PrintWriter(s.getOutputStream());
- out.println(new String(buf, 0, count - 2));
- out.flush();
- String line = reader.readLine();
- System.out.print("返回信息: ");
- System.out.println(line);
- reader.close();
- out.close();
- s.close();
- }
- } catch (Exception e) {
- System.out.println(e);
- }
- }
- }