JAVA进阶-网络编程
>通过套接字连接server
Socket指代套接字
>读取随意站点的首页
---------
/**
* @author Lean @date:2014-10-9
*/
public class SocketSample { public static void main(String[] args) {
BufferedWriter writer=null;
Socket socket=null;
try {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
socket=new Socket("localhost",8080);
OutputStream outputStream=socket.getOutputStream();
outputStream.write("GET / HTTP/1.0\n\n".getBytes());
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/Users/Administrator/Desktop/TheadSample.html")));
String appendStr=null;
while ((appendStr=reader.readLine()) != null) {
// System.out.println(appendStr);
writer.write(appendStr);
}
writer.close();
reader.close();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (socket!=null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} } }
---------
>通过url下载随意网页
---------
/**
* @author Lean @date:2014-10-9
*/
public class URLSample { public static void main(String[] args) { try {
URL url=new URL("HTTP","www.baidu.com",80,"");
// URL url=new URL("http://www.baidu.com");
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.connect();
InputStream is=connection.getInputStream();
byte[] buff=new byte[1024];
int length=0;
while ((length=is.read(buff))!=-1) {
System.out.println(new String(buff));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }
---------
>检測站点传入的cookie信息
---------
/**
* @author Lean @date:2014-10-9
*/
public class HttpCookieSample { /**
* @param args
*/
public static void main(String[] args) {
CookieManager manager=new CookieManager();
manager.setCookiePolicy(new CustomerPolicy());
CookieHandler.setDefault(manager);
try {
URL url=new URL("http://www.baidu.com");
URLConnection conn=url.openConnection();
Object content=conn.getContent();
List<HttpCookie> cookies=manager.getCookieStore().getCookies();
for (HttpCookie httpCookie : cookies) {
System.out.println(httpCookie.getName()+" "+httpCookie.getValue()+" "+httpCookie.getDomain());
printCookieLiveAge(httpCookie);
System.out.println("Cookie secured:"+httpCookie.getSecure());
System.out.println("..........."); }
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } private static void printCookieLiveAge(HttpCookie httpCookie) {
long age=httpCookie.getMaxAge();
SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");
System.out.println(age!=-1?"Cookie will expire when close ":"Cookie age is:"+df.format(age));
} static class CustomerPolicy implements CookiePolicy{ @Override
public boolean shouldAccept(URI uri, HttpCookie cookie) {
return true;
} } }
---------
>编写同一时候服务多个client的server程序
---------
/**
* @author Lean @date:2014-10-9
*/
public class ServerSocketSample { private static ServerSocket server=null; public static void main(String[] args) { try {
server=new ServerSocket(8080);
ExecutorService pool=Executors.newFixedThreadPool(3);
while (true) {
Socket socketObject= server.accept();
pool.submit(new CustomRunnable(socketObject));
}
} catch (IOException e) {
e.printStackTrace();
}
} static class CustomRunnable implements Runnable{ byte[] buff=new byte[512];
private Socket socketObject;
public CustomRunnable(Socket socketObject) {
this.socketObject=socketObject;
} @Override
public void run() {
try {
System.out.println("Thread ID>>"+Thread.currentThread().getId());
InputStream stream=socketObject.getInputStream();
stream.read(buff);
OutputStream os=socketObject.getOutputStream();
os.write(buff);
socketObject.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
---------
>编写实际的文件存储server程序
---------
StorgeServerSample
/**
* @author Lean @date:2014-10-10
*/
public class StorgeServerSample { public static void main(String[] args) {
ServerSocket socket=null;
ExecutorService service=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
try {
socket=new ServerSocket(8080);
try {
while (true) {
Socket socketObject=socket.accept();
service.submit(new RequestRunnable(socketObject));
}
} finally{
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
} } static class RequestRunnable implements Runnable{ private Socket requestSocket; public RequestRunnable(Socket socketObject) {
requestSocket=socketObject;
} @Override
public void run() {
try {
DataInputStream dataIs=new DataInputStream(requestSocket.getInputStream());
DataOutputStream dataOs=new DataOutputStream(requestSocket.getOutputStream());
int cmd=dataIs.readInt();
String message=cmd==0? "Put ":"Get ";
String fileName=dataIs.readUTF();
message+=fileName+" REQUEST";
fileName="C:/Documents and Settings/Administrator/桌面/Server.txt";
if (cmd==0) {
uploadFile(dataIs,fileName);
}else {
downFile(dataOs,fileName);
}
} catch (IOException e) {
e.printStackTrace();
} } private void uploadFile(DataInputStream dataIs, String fileName) {
try {
BufferedWriter writer=new BufferedWriter(new FileWriter(fileName));
String tempStr;
while (!(tempStr=dataIs.readUTF()).equals("-1")) {
writer.write(tempStr);
writer.newLine();
}
writer.close();
dataIs.close();
} catch (IOException e) {
e.printStackTrace();
}
} private void downFile(DataOutputStream dataOs, String fileName) {
try {
BufferedReader reader=new BufferedReader(new FileReader(fileName));
String tempStr=null;
while ((tempStr=reader.readLine())!=null) {
dataOs.writeUTF(tempStr);
}
dataOs.writeUTF("-1");
dataOs.close();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} } }
---------
StorgeClientSample
public class StorgeClientSample {
public static void main(String[] args) {
int cmd=1;
try {
Socket requestScoket=new Socket();
requestScoket.connect(new InetSocketAddress("localhost",8080));
if (cmd==0) {
String fileName="C:/Documents and Settings/Administrator/桌面/Test.txt";
BufferedReader reader=new BufferedReader(new FileReader(fileName));
DataOutputStream dataOs=new DataOutputStream(requestScoket.getOutputStream());
dataOs.writeInt(cmd);
dataOs.writeUTF(fileName);
String tempStr;
while ((tempStr=reader.readLine())!=null) {
System.out.println(tempStr);
dataOs.writeUTF(tempStr);
}
dataOs.writeUTF("-1");
dataOs.close();
reader.close();
}else {
String fileName="C:/Documents and Settings/Administrator/桌面/Down.txt";
BufferedWriter writer=new BufferedWriter(new FileWriter(fileName));
DataOutputStream dataOs=new DataOutputStream(requestScoket.getOutputStream());
dataOs.writeInt(cmd);
dataOs.writeUTF(fileName);
DataInputStream dataIs=new DataInputStream(requestScoket.getInputStream());
String tempStr;
while (!(tempStr=dataIs.readUTF()).equalsIgnoreCase("-1")) {
System.out.println(tempStr);
writer.write(tempStr);
writer.newLine();
}
dataIs.close();
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
---------
>创建多电波server和client
---------
StockTradesServer
/**
* @author Lean @date:2014-10-11
*/
public class StockTradesServer { public static void main(String[] args) {
Thread stockSThread=new Thread(new StockTradeGenerator());
stockSThread.setDaemon(true);
stockSThread.start();
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
}
} static class StockTradeGenerator implements Runnable{ private DatagramSocket broadcastSocket;
private String[] stockSymbols ={"IBM","SNE","XRX","MHP","NOK"}; public StockTradeGenerator() {
try {
broadcastSocket=new DatagramSocket(4445);
} catch (SocketException e) {
System.out.println("error create socket ! ");
}
} @Override
public void run() {
byte[] buff=new byte[126];
try {
while (true) {
int index=(int) (Math.random()*5);
float trade=generatorRandomTrade(index);
String tempStr=String.format("%s %.2f@ %s",stockSymbols[index],trade,now());
buff=tempStr.getBytes();
InetAddress groupInetAddresses;
groupInetAddresses = InetAddress.getLocalHost();
DatagramPacket datagramPacket=new DatagramPacket(buff,buff.length, groupInetAddresses,4446);
broadcastSocket.send(datagramPacket);
Thread.sleep(500);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
broadcastSocket.close();
}
} } public static float generatorRandomTrade(int index) {
float trade=(float) Math.random();
switch (index) {
case 0:
trade+=118;
break;
case 1:
trade+=29;
break;
case 2:
trade+=8;
break;
case 3:
trade+=26;
break;
case 4:
trade+=14;
break;
default:
break;
}
return trade;
} public static Object now() {
SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");
Date date=new Date();
return df.format(date);
} }
---------
StockTradeClient
/**
* @author Lean @date:2014-10-11
*/
public class StockTradeClient { public static void main(String[] args) throws IOException {
MulticastSocket multicastSocket=new MulticastSocket(4446);
InetAddress address=InetAddress.getByName("232.0.1.1");
multicastSocket.joinGroup(address);
for (int i = 0; i < 10; i++) {
byte[] buff=new byte[256];
DatagramPacket datagramPacket=new DatagramPacket(buff,buff.length);
multicastSocket.receive(datagramPacket);
System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));
}
multicastSocket.leaveGroup(address);
multicastSocket.close();
} }
---------
网络基础知识(转)
Ip:提供了数据的发送地址和接收地址;位于网络层;
Tcp:三次握手,"带重定向的肯定确认"技术来实现传输可靠性,"滑动窗体"的流量控制
对Ip包进行解包,并对分解的tcp包进行排序,假设出错,即发出又一次请求的信号
Udp:面向无连接的传输数据协议,可当做广播处理,不监控包的顺序,速度快,easy产生丢包现象;
Icmp:为ip指出通向目标地址的路径信息.
通讯port:以源地址源port,目标地址目标port作为确定,并依靠传输层协议对每次传输进行确认
数据格式:帧头+IP数据包+帧尾(帧头包含源和目标主机MAC地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息(IP头包含源和目标主机IP地址、类型、生存期等)
TCP数据信息:TCP头部+实际数据 (TCP头包含源和目标主机port号、顺序号、确认号、校验字等)
网络接口层:数据链路层是负责接收IP数据包并通过网络发送,
或者从网络上接收物理帧,抽出IP数据包,交给IP层。
网络层:装载和分解IP数据包 进行流控,地址转换,路径处理等等。
传输层:格式化数据流并检查错误。实现错误则又一次请求。
OSI/RM(开放系统互联/參考模型)
1) 物理层
对数据链路层提供物理介质连接,包含激活,维持,去活物理连接。
2) 数据链接层
传送以祯为单位的数据,并对容错,流控进行管理
3) 网络层
对网络提供建立维持终止等连接手段。最重要的是网络选路和寻址
4) 传输层
屏蔽下层控制细节,并实现可靠的传输数据机制来收发报文。
5) 会话层
进程间的通讯,管理两个会话进程间的通讯。
6) 表示层
将数据的抽象语法转化为传送语法。
对数据解压/加压等等。
7) 应用层
为用户应用进程訪问OSI提供接口,以满足用户的须要。
JAVA进阶-网络编程的更多相关文章
- JAVA的网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- 【转】JAVA之网络编程
转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...
- JAVA的网络编程【转】
JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...
- 二十三、Java基础--------网络编程
Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...
- 20145325张梓靖 实验五 "JAVA的网络编程"
20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...
- Java面向对象 网络编程 下
Java面向对象 网络编程 下 知识概要: (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端: ...
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
- Java基础——网络编程(二)
一.套接字 Socket 网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送.它在应用程序中创建,通过一种绑定机制与驱动程序建立关系, ...
随机推荐
- WebDAV协议
WebDAV是一项基于 Http1.1 协议的通信协议.它扩展了HTTP 1.1,在Get.Post.Put.Delete 等HTTP标准方法外添加了新方法,使应用程序可对Web Server直接读写 ...
- 配置个人Ip代理池
做爬虫最害怕的两件事一个是被封账户一个是被封IP地址,IP地址可以使用代理来解决,网上有许多做IP代理的服务,他们提供大量的IP地址,不过这些地址不一定都是全部可用,因为这些IP地址可能被其他人做爬虫 ...
- Lua表(table)的用法_个人总结
Lua表(table)的用法_个人总结 1.表的创建及表的介绍 --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意 ...
- A10. JVM 对象
[概述] 首先需要了解对象在内存中的存储布局,其次需要了解对对象的访问定位. [对象的内存布局] 在 HotSpot 虚拟机中,对象在内存中存储的布局可以分为 3 块区域:对象头(Header).实例 ...
- No-3.算数运算符
01. 算数运算符 算数运算符是 运算符的一种 是完成基本的算术运算使用的符号,用来处理四则运算 运算符 描述 实例 + 加 10 + 20 = 30 - 减 10 - 20 = -10 * 乘 1 ...
- linux 小键盘 数字键盘 wiki
https://wiki.archlinux.org/index.php/Activating_Numlock_on_Bootup_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96 ...
- java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表
java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表 数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...
- 【2018 1月集训 Day1】二分的代价
题意: 现在有一个长度为 n的升序数组 arr 和一个数 x,你需要在 arr 中插入 x. 你可以询问 x 跟 arri 的大小关系,保证所有 arri 和 x 互不相同.这次询问的代价为 cost ...
- Python之文件处理-递归删除特定文件
Python之文件处理-递归删除特定文件 #!/usr/bin/env python # -*- coding:utf-8 -*- import os def delete_particular_fi ...
- (蓝桥杯)2018JAVA B组 日志分析
日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞". ...