java 网络编程-tcp/udp
--转自: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的更多相关文章
- Java网络编程——TCP/UDP
UDP:面向无连接 ☆ 将数据及源地址和目的地址封装成数据包中 ☆ 每个数据报的大小限制在64K ☆ 不可靠协议 ☆ 不需要建立连接,速度快 TCP:面向有连接 ☆ 建立连接,形成传输数据的通道 ☆ ...
- 32.网络编程TCP/UDP服务
网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...
- java网络编程(TCP详解)
网络编程详解-TCP 一,TCP协议的特点 面向连接的协议(有发送端就一定要有接收端) 通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...
- iOS 网络编程 TCP/UDP HTTP
一.HTTP协议的主要特点: 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由Content-Type加以标记 4 ...
- 28_网络编程-TCP/UDP
一.传输层 1.定义 IP首部有一个协议字段,用来标识网络层(IP)的上一层所采用的是哪一种传输层协议.根据这个字段的协议号,就可以识别IP传输的数据部分究竟是TCP的内容还是 ...
- java网络编程TCP传输—流操作—拿到源后的写入动作
在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 //获取socket ...
- JAVA网络编程TCP通信
Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...
- Java分享笔记:Java网络编程--TCP程序设计
[1] TCP编程的主要步骤 客户端(client): 1.创建Socket对象,构造方法的形参列表中需要InetAddress类对象和int型值,用来指明对方的IP地址和端口号. 2.通过Socke ...
- java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket
什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...
随机推荐
- Makefile中用宏定义进行条件编译
在源代码里面如果这样是定义的: #ifdef MACRONAME //可选代码 #endif 那在makefile里面 gcc -D MACRONAME=MACRODEF 或者 gcc ...
- xmpp 协议之可扩展消息(messaging)与状态(presence)协议核心: RFC 3920
附:asmack已经不需要了,4.1以后的smack已经可以在android上使用了. XMPP Clients: http://xmpp.org/software/clients.html An ...
- Form(表单)
使用$.fn.form.defaults重写默认值对象 form提供了各种方法来操作执行表单字段,比如:ajax提交, load, clear等等.当提交表单的时候可以调用validate方法检查表单 ...
- Spark SQL概念学习系列之Spark SQL 架构分析(四)
Spark SQL 与传统 DBMS 的查询优化器 + 执行器的架构较为类似,只不过其执行器是在分布式环境中实现,并采用的 Spark 作为执行引擎. Spark SQL 的查询优化是Catalyst ...
- SSH原理与运用一:远程登录(转)
原文:http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 作者: 阮一峰 SSH是每一台Linux电脑的标准配置. 随着Linux ...
- work8
使用裸指针: #include <iostream>#include <memory>#include <stdio.h>#include <cstring& ...
- protobuf 作为配置文件
公司每个project代码中,都有一个Config类,作为模块启动的配置.其实现如下 struct Config { int num; char * file_name; int load_from_ ...
- linux下的调试工具ltrace与strace
ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用. 下面是一个ltrace与strace的对比 1)系统调用的输出对比 我们用输出he ...
- 【三支火把】---CDS5516舵机调试以及自己的感想!
我依然坚持,任何一次自己的心有感触都要及时的记录下来,这样你的努力才是真正的努力. 这两天一直在用STM32调试CDS5516舵机,其实很简单,但是却花了将近两天的时间,过程之曲折我就不说了,先总结一 ...
- Nexus搭建Manven
Nexus相当于中转服务器,减轻网络的负载,加速项目搭建的进程 1.下载地址:http://www.sonatype.org/nexus/go 2.下载的是zip包,解压后进入D:\nexus-2.8 ...