`

Socket编程之TCP/UDP

    博客分类:
  • j2se
 
阅读更多

1: 

TCP编程(一对多):

服务器端:

 

package com.sqtoon.socket.tcp;

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

public class TcpSocketServer {

	public static final int TCP_PORT = 8888;

	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		try {
			serverSocket = new ServerSocket(TCP_PORT);
			System.out.println("启动服务器, 等待客户端连接...");
			while (true) {
				final Socket socket = serverSocket.accept();
				new Thread(new Runnable() {
					DataInputStream dataInputStream = null;
					DataOutputStream dataOutputStream = null;

					@Override
					public void run() {
						try {
							while (true) {
								dataInputStream = new DataInputStream(socket.getInputStream());
								String msg = dataInputStream.readUTF(); // 接收客户端消息
								System.out.println("接收到Client发送过来的消息: " + msg);
								dataOutputStream = new DataOutputStream(socket.getOutputStream());
								dataOutputStream.writeUTF("服务器已处理消息: " + msg); // 返回给客户端消息
							}
						} catch (Exception e) {
							e.printStackTrace();
						} finally {
							try {
								dataInputStream.close();
								dataOutputStream.close();
								socket.close();
							} catch (Exception e2) {
								e2.printStackTrace();
							}
						}
					}
				}).start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				serverSocket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

 

客户端:

 

package com.sqtoon.socket.tcp;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.UUID;

public class TcpSocketClient {

	private static final String uuid = UUID.randomUUID().toString();

	public static void main(String[] args) {
		Socket socket = null;
		DataOutputStream dataOutputStream = null;
		DataInputStream dataInputStream = null;
		try {
			socket = new Socket("127.0.0.1", TcpSocketServer.TCP_PORT);

			while (true) {
				dataOutputStream = new DataOutputStream(socket.getOutputStream());

				dataOutputStream.writeUTF(uuid + "这是客户端发给服务器的消息..." + System.currentTimeMillis());

				dataInputStream = new DataInputStream(socket.getInputStream());

				String msg = dataInputStream.readUTF();

				System.out.println("接收服务器返回的消息: " + msg);

				Thread.sleep(1000 * 3);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				dataOutputStream.close();
				dataInputStream.close();
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

 

 

 

2:

UDP编程(一对一):

服务器端:

 

package com.sqtoon.socket.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class UdpSocketServer {

	public static final int UDP_PORT = 6666;
	public static final String CHATSET = "UTF-8";

	public static void main(String[] args) {
		DatagramSocket datagramSocket = null;
		try {
			datagramSocket = new DatagramSocket(UDP_PORT);

			byte[] buf = new byte[0];

			DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);

			while (true) {
				buf = new byte[UdpSocketClient.BUF_LENGTH];
				datagramPacket.setData(buf);

				datagramSocket.receive(datagramPacket);

				String msg = new String(buf, CHATSET);
				System.out.println("接收到客户端发送的消息: " + msg);

				datagramPacket.setSocketAddress(new InetSocketAddress("127.0.0.1", 5555));
				datagramPacket.setData(("服务器处理的消息: " + msg).getBytes(CHATSET));

				datagramSocket.send(datagramPacket);

				datagramPacket.setData(buf);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			datagramSocket.close();
		}
	}

}

 

客户端:

package com.sqtoon.socket.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class UdpSocketClient {

	public static final int UDP_PORT = 5555;
	public static final int BUF_LENGTH = 1024;

	public static void main(String[] args) {
		DatagramSocket datagramSocket = null;
		try {
			datagramSocket = new DatagramSocket(UDP_PORT);

			byte[] buf = new byte[0];
			DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);

			while (true) {
				buf = "客户端的消息".getBytes(UdpSocketServer.CHATSET);
				datagramPacket.setData(buf);

				datagramPacket.setSocketAddress(new InetSocketAddress("127.0.0.1", UdpSocketServer.UDP_PORT));

				datagramSocket.send(datagramPacket);

				buf = new byte[BUF_LENGTH];
				datagramPacket.setData(buf, 0, buf.length);

				datagramSocket.receive(datagramPacket);

				String msg = new String(buf, UdpSocketServer.CHATSET);

				System.out.println("接收到服务器端返回的消息: " + msg.length() + msg);

				Thread.sleep(1000 * 2);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			datagramSocket.close();
		}
	}
}

 

 

分享到:
评论

相关推荐

    TCP/UDP socket 调试工具

    TCP/UDP socket 调试工具 TCP/UDP socket 调试工具 SocketTool调试软件是一款网络TCP/UDP通信调试工具,本工具集功能强大与简单易用为一体,是无需安装的免费绿色软件。她可以帮助网络编程人员、网络维护人员检查所...

    Socket网络TCP/UDP通信调试工具

    SocketTool调试工具官方版是一款网络TCP/UDP通信调试工具。SocketTool调试工具最新版可以有效地帮助网络管理员检测各种网络通信状永久,集成了TCP服务器/客户端、UDP服务器/客户端和UDP广播/组播等功能。SocketTool...

    SocketTool (TCP/UDP Socket 调试工具 V2.2)

    Socket编程是计算机网络编程的基础,主要用于实现不同设备间的通信。这款工具能够帮助开发者模拟Socket服务端和客户端,进行数据交互,从而在开发和调试过程中快速验证网络通信功能的正确性。 SocketTool的主要特点...

    实验三socket编程代码.rar_socket编程_tcp/udp_一对多聊天_多人聊天室_计算机网络实验

    学习和理解这段代码,不仅可以帮助你掌握Socket编程的基本技巧,还能让你深入了解TCP和UDP的工作原理,以及如何在实际场景中应用它们。 总的来说,这个实验提供了丰富的实践机会,涵盖了Socket编程的核心概念,包括...

    TCP/UDP Socket调试工具

    Socket编程在IT行业中是网络通信的基础,而TCP和UDP是两种主要的传输层协议,用于在互联网上实现数据的可靠传输或无连接传输。本文将详细介绍TCP/UDP Socket调试工具的功能及其在IT工作中的应用。 TCP...

    tcp/udp socket编程

    基于TCP协议的Socket编程 ① 创建TCP服务端步骤: a) 创建一个ServerSocket对象 b) 调用accept()方法接受客户端请求 c) 从Socket中获取I/O流 d) 对I/O流进行读写操作,完成与客户端的交互 e) 关闭I/O流和...

    TCP/UDP 调试工具 v2.2

    总的来说,TCP/UDP调试工具v2.2是一款针对网络编程者的利器,它集便捷、高效、易用于一体,对于理解和优化TCP/UDP协议的应用具有极大的价值。无论你是初入编程的新手,还是经验丰富的专业人士,这个工具都将是你网络...

    TCP/UDP Socket 调试工具

    Socket编程是计算机网络编程中的重要组成部分,主要用于实现进程间的通信。在本文中,我们将深入探讨TCP和UDP Socket调试工具的相关知识,以及如何基于这两种协议实现Socket通信功能。 首先,TCP(Transmission ...

    网络编程Socket(基于TCP/UDP)的Demo

    网络编程是计算机科学中...通过学习和分析这个Demo,你可以理解TCP和UDP的Socket编程基础,为更复杂的网络应用打下坚实的基础。记住,实践是检验理论的最好方式,动手编写代码并运行Demo,你会对网络编程有更深的理解。

    TCP/UDP应用程序实现

    文件名“TCPUDP应用程序实现”很可能包含了实现上述功能的代码示例,包括客户端和服务器端的完整程序,可能还包括了必要的解释和注释。 通过学习和实践这些示例,开发者可以深入了解TCP和UDP的工作原理,以及如何在...

    SocketTool 网络TCP/UDP通信调试工具

    SocketTool调试软件是一款网络TCP/UDP通信调试工具,本工具集功能强大与简单易用为一体,是无需安装的免费绿色软件。她可以帮助网络编程人员、网络维护人员检查所开发的网络应用软硬件的通信状况。全面集成 TCP...

    一个使用C++的HPSocket完整的demo,Tcp/Udp协议可转换

    通过这个项目,开发者可以学习到如何使用C++和MFC进行网络编程,特别是如何利用HPSocket库来创建TCP和UDP服务器以及客户端。此外,还能了解到如何在TCP和UDP之间切换,这对于理解这两种协议的差异及其适用场景非常...

    SocketTool工具TCP/UDP Socket 调试工具

    SocketTool调试工具是一款网络TCP/UDP通信调试工具,可以有效地帮助网络管理员检测各种网络通信状永久,集成了TCP服务器/客户端、UDP服务器/客户端和UDP广播/组播等功能,可以帮助网络编程人员、网络维护人员检查所...

    tcp/udp socket调试工具

    Socket编程在IT行业中是网络通信的基础,特别是在TCP/IP协议栈中扮演着至关重要的角色。TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层协议,它们各自有着独特的特性和应用场景。本篇文章将围绕"tcp...

    TCP和UDP socket调试工具V2.2

    总的来说,TCP和UDP Socket调试工具V2.2是一款实用的开发辅助软件,它简化了网络编程中复杂的数据传输和连接管理,帮助开发者快速定位问题,优化网络应用的性能。无论你是初学者还是经验丰富的程序员,都能从中受益...

    Tcp/udp网络调试助手

    在Java编程环境中,开发网络应用时,可以利用Java的Socket类实现TCP通信,DatagramSocket类实现UDP通信。结合“TCP/UDP网络调试助手”,开发者可以在代码编写和调试阶段,验证程序的正确性和性能,确保网络应用的...

    TCP-UDP-Socket.zip_socket udp c#_tcp/udp socket_udp编程

    在这个"TCP-UDP-Socket.zip"压缩包中,包含了基于C#语言的TCP和UDP Socket编程示例,对于理解和应用这两种协议非常有帮助。 首先,TCP是一种面向连接的协议,它保证了数据的可靠传输。在数据传输前,TCP会建立一个...

    UDP-TCP.rar_TCP UDp_TCP-UDP_tcp/udp socket_网络UDP TCP

    标题中的"UDP-TCP.rar"表明这是一个关于网络传输协议UDP(User Datagram Protocol)与TCP(Transmission Control Protocol)的压缩文件,而"...强调了涉及的内容包括TCP与UDP的对比、Socket编程以及在网络层面上的应用...

    MFC TCP/UDP最经典例子

    这个"MFC TCP/UDP最经典例子"很可能是为了帮助开发者学习如何在MFC环境下使用TCP和UDP进行网络编程。 首先,TCP是一种面向连接的协议,它在数据传输前会先建立连接,并通过序列号、确认应答、重传机制等确保数据的...

Global site tag (gtag.js) - Google Analytics