使用UDP协议控制台模拟客户咨询

客户端代码:

package cn.luoxue.chat1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UDPClient {
    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        //定义服务器的地址,端口号,数据
        InetAddress address = InetAddress.getByName("localhost");
        int port = 8800;
        DatagramPacket packet;
        DatagramPacket packet2;
        //创建DatagramSocket,实现数据发送和接收
        DatagramSocket socket = new DatagramSocket();
        System.out.println("您好,美女小兰为您服务!");
        String str = "";
       while(!str.equals("886")) {
           System.out.print("用户说:");
           str = input.next();
           byte[] data = str.getBytes();
           //创建数据报
           packet = new DatagramPacket(data, data.length, address, port);

           //向服务器端发送数据报
           socket.send(packet);

           //接收服务器响应数据
           byte[] data2 = new byte[1024];
           packet2 = new DatagramPacket(data2, data2.length);
           socket.receive(packet2);
           String info = new String(data2, 0, packet2.getLength());
           System.out.println("客服说:"+info);
       }

        socket.close();
    }
}

服务端:

package cn.luoxue.chat1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8800);
        DatagramPacket packet = null;
        byte[] data = null;
        int count = 0;
        System.out.println("***客服静候您的咨询***");
        while(true){
            data = new byte[1024];//创建字节数组,指定接收的数据包的大小
            packet = new DatagramPacket(data, data.length);
            socket.receive(packet);//此方法在接收到数据报之前会一直阻塞
            Thread thread = new Thread(new UDPThread(socket, packet));
            thread.start();
            count++;
            System.out.println("服务器端被连接过的次数:"+count);
            InetAddress address = packet.getAddress();
            System.out.println("当前客户端的IP为:"+address.getHostAddress());

        }

    }
}

多线程代码:

package cn.luoxue.chat1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPThread implements Runnable{

    DatagramSocket socket = null;
    DatagramPacket packet = null;

    public UDPThread(DatagramSocket socket,DatagramPacket packet) {
        this.socket = socket;
        this.packet = packet;
    }

    @Override
    public void run() {
        String info = null;
        InetAddress address = null;
        int port = 8800;
        byte[] data2 = null;
        DatagramPacket packet2 = null;
        try {
            info = new String(packet.getData(), 0, packet.getLength());
            System.out.println("我是服务器,客户端说:"+info);

            address = packet.getAddress();
            port = packet.getPort();
            if(info.equals("886")){
                data2 = "好的,回聊".getBytes();
            }else if(info.equals("美女你好问个问题")){
                data2 = "先生,你想问什么呢".getBytes();
            }else if(info.equals("你认为谁最帅")){
                data2 = "那还用说,当然是小军了,人家小军玉树临风、一表人才,简直帅的掉渣!".getBytes();
            }else if(info.equals("那你认为谁最美")){
                data2 = "毫无争议绝对是小举,人家小举闭月羞花、天生丽质,美的不要不要的!".getBytes();
            }else if(info.equals("谁俩更般配呢")){
                data2 = "你懂的".getBytes();
            }else{
                data2 = "你说啥?风大听不到!".getBytes();
            }

            packet2 = new DatagramPacket(data2, data2.length, address, port);
            socket.send(packet2);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //socket.close();不能关闭
    }

}

代码参考自:http://www.cnblogs.com/zhaozihan/archive/2016/11/12/6057118.html

时间: 2024-10-27 19:08:18

使用UDP协议控制台模拟客户咨询的相关文章

基于UDP协议模拟的一个TCP协议传输系统

TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术. 我写的这个系统基于UDP协议模拟了一个TCP协议,所实现的功能如下: 1.三次握手 2.一个计时器,用来判断传输超时行为 3.快速重传 4.能处理不同的MSS(maximum segment size) 5.没有被接收方确认收到的包会被存在发送方,最大可以存MWS个(Maximum Window size) 6.能处理包丢失的情况 7.接收方一旦收到包,立刻发送确认信息给发送方 8.接收方的超时时间是固定的 9.接收方

20150108--HTTP协议+PHP模拟HTTP请求-02

HTTP协议 1. 什么是http协议? 协议:协议是一种双方约定好的规范,双方在做某一件事情的事情,必须按照事先定义好的规范去实现和操作. HTTP:超文本传输协议,HyperText Transport Protocol,超文本在服务器与浏览器之间传输的时候必须遵循的协议. 2. 什么是html? 超文本标记语言:HyperText Markup Language html的作用:保证同一数据在不同的电脑(用户),看到的效果一样. HTTP协议工作原理 HTTP协议特点 支持客户/服务器模式

在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用了udp,然后在udp上面封装了一下,模拟了一下tcp,解决了大并发的问题,之后因为做的很nb了,虽然epoll这种技术出现了,还是没有改回使用tcp了.现在再做类似的东西就不需要使用udp了.这个说法应该比较可信的. 发布于 2014-04-16 18 条评论 感谢 分享 收藏 • 没有帮助 • 

TCP/UDP协议、理解三次握手四次挥手、Socket

一.什么是socket? 中文名叫套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议. 在程序员的言论,他就是一个封装好的模块,要完成网络通讯,只需要使用系统提供的socket模块就行,我们通过调用模块中已经实现的方法建立两个进程之间的 连接和通信. 了解socket层: 二.套接字的发展史 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix. 因此,有时人们也把套接字

时间获取程序服务器 UDP 协议无关

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/ #include "unp.h" #include <time.h> int main(int argc, char **argv) { int sockfd; ssize_t n; char buff[MAXLINE]; time_t ticks; socklen_t le

理解TCP和UDP协议

目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 ·        Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号:用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接: ·        Sequence Number:用来标识从T

传输层:UDP协议

传输层:UDP 协议 一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地讲,通信双方不是主机,而是主机中的进程.主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在于 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信.两个主机的传输层

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

6.UDP协议

1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. UDP数据报结构: UDP首部格式: 解释: 源端口号:该项是任选项,默认值是0,可以被指定. 目的端口号:该项必须指定,因为这个作为接收主机内特定应用进程相关联的地址. UDP长度:该字段表示数据报文的长度(包含首部和数据部分),最小8个字节. 检验和:该字段用于防止UDP用户数据报在传输中出错.当进行检验和计算时,要在UDP数据报之