Java使用UDP聊天程序
主要想测试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聊天程序的更多相关文章
- Java使用TCP聊天程序
前面使用了UDP进行通信的聊天程序 现在做一个用TCP进行通信的聊天程序 原理: ServerSocket Socket 1.开一个线程监听端口,准备接收消息 2.不断接受消息发送到目的端口 P.S. ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- Java网络编程——UDP聊天程序
UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...
- Delphi-网络编程-第一个网络方面作品(UDP聊天程序)
其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵 我以后再改进吧.... 服务端代码: unit Unit1; interface uses Windows, ...
- java Socket Udp聊天
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...
- Java TCP Swing聊天程序
http://www.oschina.net/code/snippet_935786_52805 业余写着玩的,好多功能没实现,有兴趣的可以拿去玩玩.图片大了还上不了,额.下载地址 http: ...
- java实现UDP聊天---转载
import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; pub ...
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
要求: 使用UDP协议实现一个聊天程序 代码: 发送端: package UDP聊天程序; import java.io.IOException; import java.net.DatagramPa ...
- Java TCP/UDP网络通信编程
本文转自:http://www.cnblogs.com/cdtarena/archive/2013/04/10/3012282.html 网络应用中基本上都是TCP(Transmission Cont ...
随机推荐
- Mac 安装 mysqlclient
尝试在虚拟环境下通过 pip 安装: pip install mysqlclient 然后报错:OSError: mysql_config not found 找到官方文档 https://githu ...
- loj #6226. 「网络流 24 题」骑士共存问题
#6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上 ...
- 洛谷P3355 骑士共存问题(最小割)
传送门 de了两个小时的bug愣是没发现错在哪里……没办法只好重打了一遍竟然1A……我有点想从这里跳下去了…… 和方格取数问题差不多,把格子按行数和列数之和的奇偶性分为黑的和白的,可以发现某种颜色一定 ...
- [原创]用WinRAR实现VC源代码快速压缩创建
[原创]用WinRAR实现VC源代码快速压缩创建 by edata @ cnblogs.com/edata 2017-5-8 22:31:57 我们有的时候需要对vc项目压缩打包,因为vc项目的无关文 ...
- Postman接口测试之POST、GET请求方法
一.基础知识 1.HTTP的五种请求方法:GET, POST ,HEAD,OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法. GET请求:请求指定的页面信息,并返回实体 ...
- location的属性
http://localhost:8080/?a=b#/login location.host "localhost:8080" location.port 8080 locati ...
- Jenkins项目部署使用教程-----01安装
基本配置: 1.Linux安装配置jdk环境 1.1.上传到 Linux 服务器:例如: 上传至: cd /usr/local 1.2.解压: rpm -ivh jdk-8u111-linux-x64 ...
- 4A - Horse
打表找规律 #include <iostream> #include <queue> using namespace std; ][]; ]{, , , , -, -, -, ...
- Android LayerDrawable资源应用
1.介绍 (1)常识 (2)特点 2.实例演示 <1>新建drawable文件 app--->src---->main---->res---->drawable , ...
- pip 使用代理
pip install -i https://mirrors.aliyun.com/pypi/simple/ opencv-python 红色部分 代表使用 阿里云 代理 安装 pip