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

原创 2008年09月28日 09:05:00
注意:此代码完全是以入门水平为标准,内部有许多值得优化的地方,但作为了解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. }


版权声明:本文为博主原创文章,未经博主允许不得转载。

java TCP/IP实现简单的多人聊天功能

TCP/IP是可靠的网络协议,数据的传输需要服务端和客户端之间三次“握手”,比较适合文本等一些可靠性要求高的数据传输,但是它的效率较UDP低。下面通过一张图来简要说明使用 ServerSocket 创...
  • HD1099
  • HD1099
  • 2015年08月09日 11:49
  • 2805

Java之--------Socket编程(UDP简单聊天室)

我们在生活中很容易能够使用聊天软件,其实很简单,当然功能也是很简单的,使用UDP就可以实现。这个程序,加上界面,就可以做出简单的聊天系统了...
  • yangxin_blog
  • yangxin_blog
  • 2015年09月07日 00:23
  • 2968

基于TCP和UDP的聊天功能的实现

这里类似于登陆功能的实现,是基于UDP实现的,而聊天的内容,是基于TCP实现的,大概流程是:     建立一个服务端:    下面是UDP开启服务器返回给客户端的确定值:    public v...
  • ahjxly
  • ahjxly
  • 2013年10月28日 15:15
  • 1597

基于UDP的简单聊天程序

学习网络程序知识,记一下笔记
  • zhonghua123
  • zhonghua123
  • 2014年04月21日 14:12
  • 1994

QQ--基于TCP/UDP协议的通讯原理

QQ是一个基于TCP/UDP协议的通讯软件    www.2cto.com   发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那...
  • smartsmile2012
  • smartsmile2012
  • 2016年06月07日 20:31
  • 1800

利用Delphi编写Socket通信程序

一、Delphi与Socket    计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议。TCP是面向连接的,通信双方保持一条通路,好比目前的 电话线,使用te...
  • nanfeiyannan
  • nanfeiyannan
  • 2013年08月22日 20:38
  • 1686

socket编程实现的多人局域网聊天(udp)多线程

服务器端: /* * File Name: socket_udp_server.c * Author: eagle * mail: zhaocheng121@163.com * Cre...
  • DeltaForce_eagle
  • DeltaForce_eagle
  • 2015年10月10日 09:57
  • 1373

Java UDP使用Socket进行网络聊天(2)之群聊版

本文演示,使用Socket进行网络聊天之群聊,实现客户端给"局域网"网段里面的所以机器发送广播,当发送“886”的时候,表示客户端关闭。 1)客户端,给服务器发送数据,发送“886”表示关闭客户端。 ...
  • u012339743
  • u012339743
  • 2014年09月16日 09:33
  • 2601

10 qt udp编程和网络聊天室的实现

Linux系统编程: udp 接收端: socket(AF_INET, SOCK_DGRAM, 0); bind(..) recvfr...
  • jklinux
  • jklinux
  • 2017年05月12日 11:28
  • 478

C语言编写基于TCP和UDP协议的Socket通信程序示例

Tcp多线程服务器和客户端程序 服务器程序:#include #include #include #include #include #include #include #define ...
  • jack_20
  • jack_20
  • 2016年12月08日 22:01
  • 1039
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP/UDP实现相同聊天功能的代码
举报原因:
原因补充:

(最多只允许输入30个字)