--转自:http://blog.csdn.net/nyzhl/article/details/1705039

直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/article/details/1705039

Java UDP网络编程主要通过 DatagramSocket和DatagramPacket 两个类实现的,下面是一个示例程序,
Server监听UDP 2000端口并把收到的Long类型数值打印出来
Client则通过输入获得Long类型的数值,并把它发给Server

Server:

package com.sas ;
import java.net.*;
import java.io.*; public class DatagramServer {
public static void main (String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(2000);
}
catch (SocketException e) {
e.printStackTrace();
System.exit(-1);
}
byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
while (true) {
DataInputStream in = new DataInputStream (
new ByteArrayInputStream (buffer)
);
try {
ds.receive(dp);
System.out.println(in.readLong());
in.close();
}
catch (IOException e) {
e.printStackTrace();
continue;
}
}
//ds.close(); JDK提示"无法访问的语句"
//因为前面是死循环,无论如何也执行不到后面的语句
}
}

Client:

package com.sas;
import java.net.*;
import java.io.*; public class DatagramClient {
public static void main (String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
}
catch (SocketException e) {
e.printStackTrace();
System.exit(-1);
}
System.out.println("输入一个数字:");
BufferedReader typeReader = new BufferedReader (
new InputStreamReader(System.in)
);
long data = 0;
while(true) {
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream (bytesOut);
try {
data = Long.parseLong(typeReader.readLine());
dataOut.writeLong(data);
dataOut.flush();
byte[] buffer = bytesOut.toByteArray();
DatagramPacket dp = new DatagramPacket(
buffer,
buffer.length,
new InetSocketAddress("127.0.0.1",2000)
);
ds.send(dp);
dataOut.close();
bytesOut.close();
}
catch (SocketException e) {
System.err.println("Socket Error!");
continue;
}
catch (IOException e) {
System.err.println("IO Error!");
continue;
}
catch (Exception e) {
e.printStackTrace();
continue;
}
}
//ds.close(); JDK提示"无法访问的语句"
//因为前面是死循环,无论如何也执行不到后面的语句
}
}

TCP实现:

client:

package com.sas;

import java.io.OutputStreamWriter;
import java.net.Socket; public class TCPClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1",2000);
OutputStreamWriter w = new OutputStreamWriter(s.getOutputStream());
w.write("Hello服务器");
w.flush();
w.close();
s.close();
}
}

server:

package com.sas;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(2000);
while(true) {
Socket s = ss.accept();
System.out.println("A client has heen connected.");
InputStreamReader r = new InputStreamReader(s.getInputStream());
int c = 0;
while((c=r.read())>-1) {
System.out.print((char)c);
}
System.out.println();
r.close();
s.close();
}
}
}

java 网络编程-tcp/udp的更多相关文章

  1. Java网络编程——TCP/UDP

    UDP:面向无连接 ☆ 将数据及源地址和目的地址封装成数据包中 ☆ 每个数据报的大小限制在64K ☆ 不可靠协议 ☆ 不需要建立连接,速度快 TCP:面向有连接 ☆ 建立连接,形成传输数据的通道 ☆ ...

  2. 32.网络编程TCP/UDP服务

    网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...

  3. java网络编程(TCP详解)

    网络编程详解-TCP 一,TCP协议的特点              面向连接的协议(有发送端就一定要有接收端)    通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...

  4. iOS 网络编程 TCP/UDP HTTP

    一.HTTP协议的主要特点: 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由Content-Type加以标记 4 ...

  5. 28_网络编程-TCP/UDP

    一.传输层       1.定义       IP首部有一个协议字段,用来标识网络层(IP)的上一层所采用的是哪一种传输层协议.根据这个字段的协议号,就可以识别IP传输的数据部分究竟是TCP的内容还是 ...

  6. java网络编程TCP传输—流操作—拿到源后的写入动作

    在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 //获取socket ...

  7. JAVA网络编程TCP通信

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...

  8. Java分享笔记:Java网络编程--TCP程序设计

    [1] TCP编程的主要步骤 客户端(client): 1.创建Socket对象,构造方法的形参列表中需要InetAddress类对象和int型值,用来指明对方的IP地址和端口号. 2.通过Socke ...

  9. java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket

    什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...

随机推荐

  1. ubuntu 备份安装程序列表

    一般情况下,我们重装ubuntu的系统会做如下几个事情 1)修改默认的程序更新源 2)开始根据需求安装软件. 3)配置文件(如vim/tmux等) 对于步骤,只需要cp /etc//etc/apt/s ...

  2. POJ 3159 Candies(差分约束,最短路)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 20067   Accepted: 5293 Descrip ...

  3. 转载yield关键字理解

    实现IEnumerable接口及理解yield关键字   [摘要]本文介绍实现IEnumerable接口及理解yield关键字,并讨论IEnumerable接口如何使得foreach语句可以使用. 本 ...

  4. 转载Repository 和Unit of work的使用说明

    利用Repository and Unit of Work重构项目 文章索引和简介 项目最基础的东西已经结束了,但是现在我们的项目还不健全  不利于测试 重复性代码多   层与层之间耦合性高  不利于 ...

  5. Oracle DB 执行用户管理的备份和恢复

    • 说明用户管理的备份和恢复与服务器管理的备份和恢复 之间的差异 • 执行用户管理的数据库完全恢复 • 执行用户管理的数据库不完全恢复 备份和恢复的使用类型 数据库备份和恢复的类型包括: • 用户管理 ...

  6. linux(centos 6)下记录所有用户的操作以及ip、时间

    编辑/etc/profile文件,在文件末尾加入下面代码: [root@iZ23nn1p4mjZ root]# vi /etc/profile history USER=`whoami` USER_I ...

  7. 用C#调用蓝牙编程

    2013-04-22 09:41:06 什么是蓝牙? 现在只能手机这么发达,蓝牙对我们来说肯定不陌生.我来介绍一下官方概念: 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电 ...

  8. 使用Github遇到的问题及解决办法

    问题一: 当push代码上去仓库时,出现 ! [rejected]        master -> master (fetch first) error: failed to push som ...

  9. Unix-Linux编程实践 学习点滴

    1.结构体最后定义一个char p[0]有什么作用 2. 3. 4. 1.结构体最后定义一个char p[0] 有什么作用 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: ...

  10. Codeforces Round #327 (Div. 2) D. Chip 'n Dale Rescue Rangers 二分 物理

    D. Chip 'n Dale Rescue Rangers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...