package Socket;

import java.net.DatagramPacket;
import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA,
int destPort) {
byte[] buf = new byte[s.length() + 1];
s.getBytes(0, s.length(), buf, 0);
return new DatagramPacket(buf, buf.length, destIA, destPort);
} public static String toString(DatagramPacket p) {
return new String(p.getData(), 0, p.getLength());
}
}
package Socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class ChatterServer {
static final int INPORT = 1712;
private byte[] buf = new byte[1000];
private DatagramPacket dp = new DatagramPacket(buf, buf.length);
private DatagramSocket socket; public ChatterServer() {
try {
socket = new DatagramSocket(INPORT);// 创建一接收消息的对象,而不是每次接收消息都创建一个
System.out.println("Server started");
while (true) {
socket.receive(dp);
//接收到客户端的消息
String rcvd = Dgram.toString(dp) + ",from address:"
+ dp.getAddress() + ",port:" + dp.getPort();
System.out.println("From Client:"+rcvd); String echoString = "From Server Echoed:" + rcvd;
DatagramPacket echo = Dgram.toDatagram(echoString,
dp.getAddress(), dp.getPort());
//将数据包发送给客户端
socket.send(echo);
}
} catch (SocketException e) {
System.err.println("Can't open socket");
System.exit(1);
} catch (IOException e) {
System.err.println("Communication error");
e.printStackTrace();
}
} public static void main(String[] args) {
new ChatterServer();
}
}
package Socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; public class ChatterClient extends Thread { private DatagramSocket s;
private InetAddress hostAddress;
private byte[] buf = new byte[1000];
private DatagramPacket dp = new DatagramPacket(buf, buf.length);
private int id; public ChatterClient(int identifier) {
id = identifier;
try {
s = new DatagramSocket();
hostAddress = InetAddress.getByName("localhost"); } catch (UnknownHostException e) {
System.err.println("Cannot find host");
System.exit(1);
} catch (SocketException e) {
System.err.println("Can't open socket");
e.printStackTrace();
System.exit(1);
}
System.out.println("ChatterClient starting");
} public void run() {
try {
for (int i = 0; i < 25; i++) {
String outMessage = "Client #" + id + ",message #" + i;
s.send(Dgram.toDatagram(outMessage, hostAddress,
ChatterServer.INPORT));
s.receive(dp);
String rcvd = "Client #" + id + ",rcvd from " + dp.getAddress()
+ ", " + dp.getPort() + ":" + Dgram.toString(dp);
System.out.println(rcvd);
}
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
} public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new ChatterClient(i).start();
}
}
}

java网络编程之UDP实例的更多相关文章

  1. Java网络编程之UDP

    Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...

  2. java网络编程之UDP通讯

    详细介绍了java中的网络通信机制,尤其是UDP协议,通过对UDP的基本使用进行举例说明如何使用UDP进行数据的发送接收,并举了两个小demo说明UDP的使用注意事项. UDP协议原理图解: UDP协 ...

  3. java 网络编程之UDP通信和简单的群聊程序

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. java网络编程之TCP实例

    Dgram类 package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgr ...

  5. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

  6. Java网络编程之InetAddress浅析

    Java网络编程之InetAddress浅析 一.InetAddress综述 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetA ...

  7. 网络编程之UDP编程

    网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...

  8. Java网络编程之URLConnection

    Java网络编程之URLConnecton 一.URLConnection简介 URLConnection是一个抽象类,表示指向URL指定资源的活动连接.URLConnection有两个不同但相关的用 ...

  9. Java网络编程之URL和URI

    Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...

随机推荐

  1. C#/Java/C/C++基本类型所占大小及表示范围

    C/C++的数据类型: 一,整型 Turbo C:   [signed] int 2Byte//有符号数,-32768~32767   unsigned int 2Byte //无符号数,只能表示整数 ...

  2. Ubuntu安装steam游戏平台的解决方案

    steam是一个游戏平台,上面提供了很多收费和免费的游戏,在安装的过程中遇到了一些问题,所以把自己遇到的问题及解决方案分享出来供大家参考. 第一步:安装steam平台 sudo apt-get ins ...

  3. LightOJ 1315 - Game of Hyper Knights(博弈sg函数)

    G - Game of Hyper Knights Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & ...

  4. sublime text3侧边栏主题不生效问题解决

    sublime text3主题插件: Seti_UI 插件安装: 在线安装:需要FQ window: ctrl+shift+p 找install package:之后搜索 Seti_UI 安装完成后需 ...

  5. native app

    Apache Cordova是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.你可以把他想象成类似于Webkit和Google ...

  6. hungary

    更正:模数1000000007 /* 最大匹配求p=1的情况能得30分 正解:树形DP,f[i][0/1]表示i节点向下连的那条边选或不选时的最大值 */ #include<iostream&g ...

  7. Java编程设计2

    一般我们会以这种设计方式生产对象实例,如: 创建一个接口: public interface TestOpen { String getVirtualHost(); String getCapabil ...

  8. 侃侃前端MVC设计模式

    前言 前端的MVC,近几年一直很火,大家也都纷纷讨论着,于是乎,抽空总结一下这个知识点.看了些文章,结合实践略作总结并发表一下自己的看法. 最初接触MVC是后端Java的MVC架构,用一张图来表示之— ...

  9. oracle 10g 学习之基本 SQL SELECT 语句(4)

    本篇文章中,对于有的和MSSQL Server相同的语法我就没有再写了,这里我只写Oracle和MSSQL Server有点不同的 定义空值 l  空值是无效的,未指定的,未知的或不可预知的值 l  ...

  10. sina sae 部署 java ssh 项目

    转自:http://jacobcookie.iteye.com/blog/1876798 1. 在sae上使用struts,需要添加的Listener,在com.company.listener中添加 ...