主要想测试Java UDP通信。Java UDP使用DatagramSocket和DatagramPacket完成UDP通信

主要思路:

1.本机通信,ip地址为:127.0.0.1

2.开一个线程监听一个端口

3.向端口发送消息

4.运行程序java ChatWindow desport listenport

ChatWindow.java

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.Scanner; /**
* 聊天小程序
* 使用UDP进行通信
* 开一个线程,监听一个端口,接收消息
* 这里主要用于本机通信,IP为127.0.0.1
*
* 发送消息正常,接收消息没反应
* @author GXF
*
*/
public class ChatWindow {
private int listenPort; //监听端口
private int desPort; //目标端口 /**
* 初始化目的端口和监听端口
* @param desPort
* @param listenPort
*/
public ChatWindow(int desPort, int listenPort){
this.desPort = desPort;
this.listenPort = listenPort; //启动监听线程
Thread listenMessageThread = new Thread(new ReceiveMessage());
listenMessageThread.start(); System.out.println("程序已启动,愉快的开始聊天吧!");
//接收用户输入的消息
Scanner scanner = new Scanner(System.in);
while(true){
String message = scanner.nextLine();
sendMessag(message);
}
} /**
* 向目的端口发送一个消息
* @param message
*/
public void sendMessag(String message){
//初始化一个socket
//设置好数据包
//发送消息
try {
DatagramSocket socketToSendMessage = new DatagramSocket();
byte buff[] = message.getBytes();
DatagramPacket packetToSend = new DatagramPacket(buff, buff.length, InetAddress.getByName("127.0.0.1"), desPort);
socketToSendMessage.send(packetToSend); //发送消息
socketToSendMessage.close(); //关闭socket
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 监听端口线程
* 实例化一个DatagramSocket,并绑定一个端口进行监听
* @author GXF
*
*/
class ReceiveMessage implements Runnable{
private DatagramSocket listenSocket;
private DatagramPacket receivePacket;
private byte buff[] = new byte[1024];
@Override
public void run() {
//init
init();
//start 监听
while(true){
try {
listenSocket.receive(receivePacket); //接收数据包
String receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println(receiveMessage); //输出接收到的消息
} catch (IOException e) {
e.printStackTrace();
}
} } /**
* 对socket,端口,进行初始化
*/
public void init(){
try {
InetSocketAddress serverSocketAddress = new InetSocketAddress(listenPort);
listenSocket = new DatagramSocket(serverSocketAddress);
receivePacket = new DatagramPacket(buff, buff.length);
} catch (Exception e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
if(args.length != 2)
{
System.out.println("usage: java ChatWindow desport listenport");
return;
}
int desport = Integer.valueOf(args[0]);
int listenPort = Integer.valueOf(args[1]);
//first is desport, seconde is listenport
ChatWindow chatWindow = new ChatWindow(desport, listenPort); } }

Java使用UDP聊天程序的更多相关文章

  1. Java使用TCP聊天程序

    前面使用了UDP进行通信的聊天程序 现在做一个用TCP进行通信的聊天程序 原理: ServerSocket Socket 1.开一个线程监听端口,准备接收消息 2.不断接受消息发送到目的端口 P.S. ...

  2. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  3. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  4. Delphi-网络编程-第一个网络方面作品(UDP聊天程序)

    其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵 我以后再改进吧.... 服务端代码: unit Unit1;   interface   uses   Windows, ...

  5. java Socket Udp聊天

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...

  6. Java TCP Swing聊天程序

      http://www.oschina.net/code/snippet_935786_52805   业余写着玩的,好多功能没实现,有兴趣的可以拿去玩玩.图片大了还上不了,额.下载地址 http: ...

  7. java实现UDP聊天---转载

    import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; pub ...

  8. 网络编程应用:基于UDP协议【实现聊天程序】--练习

    要求: 使用UDP协议实现一个聊天程序 代码: 发送端: package UDP聊天程序; import java.io.IOException; import java.net.DatagramPa ...

  9. Java TCP/UDP网络通信编程

    本文转自:http://www.cnblogs.com/cdtarena/archive/2013/04/10/3012282.html 网络应用中基本上都是TCP(Transmission Cont ...

随机推荐

  1. bzoj1798维护序列

    题目链接 暴力数据结构之线段树$qwq$ 裸题直接敲板子 忘了啥时候写的了$qwq$ 直接上代码吧 /************************************************* ...

  2. SDUT OJ 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  3. mysql的唯一索引UNIQUE

    创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的 ...

  4. window 7/8/10 安装nginx

    1.百度 nginx   找到    http://nginx.org/   官网 2.找到一个nginx 版本  如 最新版本 2018-12-25  nginx-1.15.8 mainline v ...

  5. Bootstrap点击弹出注册登录

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. kotlin spring @value 注解

    spring boot和kotlin里静态类使用@Value注解配置解决方案前言spring boot里默认是不能给静态属性使用@Value赋值的.所以这里使用中间变量过渡绑定. 方案//applic ...

  7. python tkinter 基本操作与事件

    基本操作 import tkinter as tk # 引入tk 包 win=tk.Tk() # 引入窗口对象 win.title("窗口标题") # 窗口标题 win.geome ...

  8. asp.net 同时执行js事件和代码事件 导出 excel

     onclick="return bnQuery_onclick()" onserverclick="bnQuery_ServerClick"   public ...

  9. 【KMP】洛谷P2375 [NOI2014]动物园 题解

        一开始的方向应该对了,但是没有想到合理的优化还是没写出来…… 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己 ...

  10. BZOJ - 1458 / P4311 最大流应用 贪心

    题意:给定n*m的图,每个士兵可以占领当前行和列,第i行至少要R[i]个士兵占领,第j列至少要C[j]个士兵占领,部分网格无法占领,求占领所用最少士兵数,若无解则输出orz 士兵的贡献情况有1(只有效 ...