`
逆风的香1314
  • 浏览: 1431798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

TCP/UDP实现相同聊天功能的代码

阅读更多
注意:此代码完全是以入门水平为标准,内部有许多值得优化的地方,但作为了解TCP/UDP的功能还是可以的。
实际代码一定要进行优化,至少要启用线程。

UDP的实现部分 原文:http://www.java2000.net/p10504

接收代码
  1. package chat;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. /**
  6.  * UDP 接收数据的代码。
  7.  * 
  8.  * @author 赵学庆 www.java2000.net
  9.  */
  10. public class UDPReceiveTest {
  11.   void display() {
  12.     byte buf[] = new byte[256];
  13.     DatagramPacket sPacket;
  14.     DatagramPacket rPacket;
  15.     DatagramSocket socket;
  16.     int count;
  17.     byte[] res = "OK".getBytes();
  18.     try {
  19.       socket = new DatagramSocket(8888);
  20.       while (true) {
  21.         rPacket = new DatagramPacket(buf, buf.length);
  22.         // 接收数据报
  23.         socket.receive(rPacket);
  24.         // 获取发送方的地址
  25.         InetAddress addr = rPacket.getAddress();
  26.         // 获取发送方的端口
  27.         int port = rPacket.getPort();
  28.         count = rPacket.getLength();
  29.         System.out.println("接收到来自 " + addr.getHostAddress() + " 数据:");
  30.         System.out.println(new String(buf, 0, count));
  31.         // 发送数据报
  32.         sPacket = new DatagramPacket(res, res.length, addr, port);
  33.         socket.send(sPacket);
  34.       }
  35.     } catch (Exception e) {
  36.       System.out.println(e);
  37.     }
  38.   }
  39.   public static void main(String[] args) {
  40.     UDPReceiveTest app = new UDPReceiveTest();
  41.     app.display();
  42.   }
  43. }
发送代码
  1. package chat;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. /**
  6.  * UDP 发送数据的代码。
  7.  * 
  8.  * @author 赵学庆 www.java2000.net
  9.  */
  10. public class UDPSendTest {
  11.   public static void main(String[] args) {
  12.     UDPSendTest app = new UDPSendTest();
  13.     app.display();
  14.   }
  15.   void display() {
  16.     byte buf[] = new byte[256];
  17.     DatagramPacket sPacket;
  18.     DatagramPacket rPacket;
  19.     DatagramSocket socket;
  20.     int count;
  21.     byte[] host = new byte[128];
  22.     try {
  23.       socket = new DatagramSocket();
  24.       // 输入目的方的主机名
  25.       System.out.print("请输入目的方的主机名: ");
  26.       count = System.in.read(host);
  27.       InetAddress addr = InetAddress.getByName(new String(host, 0, count - 2));
  28.       while (true) {
  29.         System.out.print("请输入要发送的数据: ");
  30.         count = System.in.read(buf);
  31.         // 发送数据报
  32.         sPacket = new DatagramPacket(buf, count - 2, addr, 8888);
  33.         socket.send(sPacket);
  34.         // 接收数据报
  35.         rPacket = new DatagramPacket(buf, buf.length);
  36.         socket.receive(rPacket);
  37.         System.out.print("返回信息: ");
  38.         String str = new String(rPacket.getData(), 0, rPacket.getLength());
  39.         System.out.println(str);
  40.       }
  41.     } catch (Exception e) {
  42.       System.out.println(e);
  43.     }
  44.   }
  45. }




TCP的实现部分 原文:
http://www.java2000.net/p10506
接收代码
  1. package chat;
  2. import java.io.BufferedReader;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. /**
  9.  * TCP 接收数据的代码。
  10.  * 
  11.  * @author 赵学庆 www.java2000.net
  12.  */
  13. public class TCPReceiveTest {
  14.   void display() {
  15.     ServerSocket socket;
  16.     try {
  17.       socket = new ServerSocket(8888);
  18.       while (true) {
  19.         Socket s = socket.accept();
  20.         InputStream is = s.getInputStream();
  21.         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  22.         PrintWriter out = new PrintWriter(s.getOutputStream());
  23.         String line = reader.readLine();
  24.         System.out.println("接收到来自 " + s.getRemoteSocketAddress() + " 数据:");
  25.         System.out.println(line);
  26.         out.print("OK");
  27.         out.flush();
  28.         out.close();
  29.         reader.close();
  30.         s.close();
  31.       }
  32.     } catch (Exception e) {
  33.       System.out.println(e);
  34.     }
  35.   }
  36.   public static void main(String[] args) {
  37.     TCPReceiveTest app = new TCPReceiveTest();
  38.     app.display();
  39.   }
  40. }

发送代码
  1. package chat;
  2. import java.io.BufferedReader;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.InetAddress;
  7. import java.net.Socket;
  8. /**
  9.  * TCP 发送数据的代码。
  10.  * 
  11.  * @author 赵学庆 www.java2000.net
  12.  */
  13. public class TCPSendTest {
  14.   public static void main(String[] args) {
  15.     TCPSendTest app = new TCPSendTest();
  16.     app.display();
  17.   }
  18.   void display() {
  19.     Socket s;
  20.     byte buf[] = new byte[256];
  21.     int count;
  22.     byte[] host = new byte[128];
  23.     try {
  24.       // 输入目的方的主机名
  25.       System.out.print("请输入目的方的主机名: ");
  26.       count = System.in.read(host);
  27.       InetAddress addr = InetAddress.getByName(new String(host, 0, count - 2));
  28.       while (true) {
  29.         System.out.print("请输入要发送的数据: ");
  30.         count = System.in.read(buf);
  31.         // 发送数据报
  32.         s = new Socket(addr.getHostAddress(), 8888);
  33.         InputStream is = s.getInputStream();
  34.         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  35.         PrintWriter out = new PrintWriter(s.getOutputStream());
  36.         out.println(new String(buf, 0, count - 2));
  37.         out.flush();
  38.         String line = reader.readLine();
  39.         System.out.print("返回信息: ");
  40.         System.out.println(line);
  41.         reader.close();
  42.         out.close();
  43.         s.close();
  44.       }
  45.     } catch (Exception e) {
  46.       System.out.println(e);
  47.     }
  48.   }
  49. }


分享到:
评论

相关推荐

    基于 C/S 架构的聊天室设计与实现(C++)

    线用户信息,通知新用户的上线和用户的下线,实现群聊功能。 服务器负责管理用户的连接、发送消息与退出,有新用户建立连接时,记录新用 户信息,并向同组其他客户端广播;用户退出时,清除用户信息,并向同组其他...

    Java UDP 实现简单聊天功能

    Java UDP实现简单聊天功能主要涉及了网络编程中的用户数据报协议(User Datagram Protocol,简称UDP)。UDP是一种无连接、不可靠的传输协议,适合于实时数据传输或对速度要求较高的应用,因为它没有TCP的握手和确认...

    UDP实现的聊天工具

    在这个“UDP实现的聊天工具”项目中,开发者利用UDP的特性来构建了一个简单但功能齐全的聊天应用程序。 首先,让我们详细了解一下UDP的特点: 1. **无连接**:UDP在发送数据之前不需要建立连接,因此它的通信过程...

    C#TCP-UDP.rar

    本资源“C#TCP-UDP.rar”包含的源代码示例,旨在帮助开发者理解和实现C#环境下的TCP与UDP通信。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过建立连接、...

    android实现局域网聊天 - UDP实现

    在Android平台上实现局域网聊天应用,通常会利用...总之,实现Android局域网聊天应用涉及了网络编程、多线程、数据传输、错误处理等多个方面,通过使用UDP协议,可以在保持较低延迟的同时,实现快速、实时的聊天功能。

    iphone UDP 聊天例子

    在iOS开发中,如果我们要创建一个UDP聊天应用,那么这个"iphone UDP 聊天例子"很可能是展示如何利用Objective-C或Swift编程语言来实现这一功能的代码示例。 首先,我们需要理解UDP的基础知识。与TCP(Transmission ...

    java udp协议交互 控制台聊天

    Java UDP协议交互是一种基于无连接的传输层协议,用于实现控制台聊天应用。UDP(User Datagram Protocol)相较于TCP(Transmission Control Protocol)具有更快的传输速度,因为它不进行握手、确认和重传等复杂的...

    VC++,CSocket实现网络聊天,可发文件,全双工

    3. **网络聊天应用**:此项目实现了一个网络聊天应用,意味着它涉及到TCP/IP协议,可能使用了UDP(User Datagram Protocol)或TCP(Transmission Control Protocol)来保证数据的可靠传输。TCP是面向连接的,保证...

    基于UDP局域网的聊天软件

    ### 基于UDP局域网的聊天软件 ...以上内容详细介绍了基于UDP局域网聊天软件的设计与实现过程,从开发环境的选择到关键技术的讲解,再到具体的设计与实现细节,旨在帮助读者全面了解此类软件的开发流程和技术要点。

    聊天软件的代码

    一旦连接建立,双方就可以通过发送和接收数据来实现聊天功能。TCP的`accept()`函数用于接收新的连接,`send()`和`recv()`函数用于发送和接收数据。 2. **UDP通信**:与TCP不同,UDP是无连接的,不保证数据的顺序或...

    wTalk-client.zip

    本项目"Windows,VS2017,VS2008,MFC多人聊天窗口客户端"提供了一个实现单人聊天和群组聊天功能的实例,其核心技术基于Microsoft Foundation Class (MFC)库,利用TCP/IP和UDP协议进行数据传输。下面,我们将详细...

    UDP.rar_UDP delphi_delphi udp_delphi udp 广播

    本项目"UDP.rar"是一个基于UDP的Delphi实现的网络聊天工具,它展示了如何在Delphi中使用UDP进行数据发送和接收。 Delphi UDP通信的基本原理: 1. 创建Socket:在Delphi中,可以使用TUDPClient或TUDPServer组件来...

    python实现udp聊天窗口

    UDP(User Datagram ...以上是关于Python实现UDP聊天窗口的核心技术点,通过这些知识,你可以理解并实现一个简单的UDP聊天程序。然而,实际的聊天应用通常还需要处理更多的细节,如错误处理、用户认证、消息确认等。

    局域网p2p聊天

    局域网P2P聊天是一种在本地网络内实现设备间直接通信的技术,它不依赖中央服务器..."LAN_chat"和"局域网P2P聊天"这些文件很可能包含了实现这一功能的相关代码或文档,对于理解P2P聊天技术的实现细节具有重要参考价值。

    类似QQ的局域网聊天源代码

    而这里提到的源代码,则是实现了局域网内的类似功能,意味着它可能不包含所有QQ的功能,但至少支持用户在相同网络环境下的文字聊天。 【描述】中的"sockets"是指网络编程中的套接字(Socket),它是计算机网络中...

    C#网络编程方法概述

    在C#中,使用Socket类进行低级网络通信,可以实现TCP和UDP两种协议的连接。TCP套接字提供面向连接的、可靠的服务,而UDP套接字则提供无连接、不可靠的数据传输。 4. **多线程编程** - 在网络编程中,多线程技术常...

    Linux下局域网聊天软件,文件,UDP协议

    这个项目利用了C语言的高效性和UDP(User Datagram Protocol)的简单与快速特性,来实现基本的通信功能,包括注册、登录、私聊、群聊、在线用户列表展示、下线通知以及重复登录提示。以下是对这些知识点的详细解释:...

    基于Socket的聊天室源程序

    在C#中,System.Net.Sockets命名空间提供了Socket类,用于实现TCP/IP协议栈的各种服务,包括TCP和UDP协议。 在这个聊天室项目中,我们有两个主要组件:聊天室服务器和聊天室客户端。服务器端的角色至关重要,它不仅...

    udp_service.zip_UDP_UdpService_android_安卓UDP 通信_安卓服务器

    本项目"udp_service.zip"是一个基于UDP的Android服务器端代码示例,旨在帮助开发者理解和实现Android设备上的UDP通信。 1. **UDP协议基础**: UDP是一种不可靠的、无连接的协议,它不像TCP那样需要建立连接、维护...

Global site tag (gtag.js) - Google Analytics