>通过套接字连接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进阶-网络编程的更多相关文章

  1. JAVA的网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  2. 【转】JAVA之网络编程

    转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...

  3. JAVA的网络编程【转】

    JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...

  4. 二十三、Java基础--------网络编程

    Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...

  5. Java Socket 网络编程心跳设计概念

    Java Socket 网络编程心跳设计概念   1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...

  6. 20145325张梓靖 实验五 "JAVA的网络编程"

    20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...

  7. Java面向对象 网络编程 下

    Java面向对象 网络编程  下 知识概要:                   (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端:   ...

  8. Java面向对象 网络编程 上

     Java面向对象 网络编程 上 知识概要:                     (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...

  9. Java基础——网络编程(二)

    一.套接字 Socket 网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送.它在应用程序中创建,通过一种绑定机制与驱动程序建立关系, ...

随机推荐

  1. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (四) -- Push API 和 Pull API

    RabbitMQ 中针对消息的分发提供了 Push API (订阅模式) 和 Pull API (主动获取) 两种模式. 在 PHP 中, 这两种模式分别通过 AMQPQueue 类中的 consum ...

  2. 2.10.1 article元素

    嵌套 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <titl ...

  3. 第2节 hive基本操作:11、hive当中的分桶表以及修改表删除表数据加载数据导出等

    分桶表 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去 开启hive的桶表功能 set hive.enforce.bucketing= ...

  4. Cloudera’s Distribution Including Apache Hadoop(CDH)安装过程

    文档地址:https://www.cloudera.com/documentation.html                 https://www.cloudera.com/documentat ...

  5. P2347 砝码称重(动态规划递推,背包,洛谷)

    题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...

  6. ERC20 Token

    pragma solidity ^0.4.8; contract Token{ // token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply(). uint ...

  7. Python列表、元组、字典、集合的内置使用方法

    列表: 是一种可以存储多个值得数据容器 内容是有序的 可以存储任何数据类型 可以存储重复的元素 是可变类型(当内容发生变化时id不变) 元组: 也是一种可以存储多个值得数据容器 元组中的元素不可以被修 ...

  8. python+selenium之元素的八大定位方法

    以百度搜索框为例,先打开百度网页 1.点右上角爬虫按钮 2.点左下角箭头 3.讲箭头移动到百度搜索输入框上,输入框高亮状态 4.下方红色区域就是单位到输入框的属性: <input id=&quo ...

  9. C语言学习7

    结构体数组:实现简易通讯录 #include <stdio.h> #include <stdlib.h> #define NUM 3 struct person { ]; ]; ...

  10. UVa Sculpture(离散化 floodfill)

    题意: 给定n个立方体的一个顶点坐标和3边长度,  问这些立方体组成的雕塑的表面积和体积,   坐标都是整数,n最大为50,  最大为500, 边长最大也是500. 分析: 继UVa221后又一道离散 ...