>通过套接字连接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. badblocks - 查询设备的坏区块

    语法(SYNPSIS) badblocks [ -svwnf ] [ -b block-size ] [ -c blocks_at_once ] [ -i input_file ] [ -o outp ...

  2. 最后一个非零数字(POJ 1604、POJ 1150、POJ 3406)

    POJ中有些问题给出了一个长数字序列(即序列中的数字非常多),这个长数字序列的生成有一定的规律,要求求出这个长数字序列中某个位上的数字是多少.这种问题通过分析,找出规律就容易解决. 例如,N!是一个非 ...

  3. 网络编程 - 协议遇到IO自动切换

    一.协议遇到IO自动切换 python网络编程,遇到IO自动切换,通过模块gevent来实现: import gevent,time def g1(): print ("g1 is star ...

  4. 笔试算法题(26):顺时针打印矩阵 & 求数组中数对差的最大值

    出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...

  5. 查看密码存放地-shadow

    shadow 位置:/cat/shadow 作用:存放用户的密码等信息 使用查看命令以后得到以下数据 我们会看到9个字段,分别用  :隔开,如上图所示一一解释: 第一字段:用户名称 第二字段:加密密码 ...

  6. log4j动态文件名

    在项目中,对log的输出有多种多样的要求,下面具体分析一下动态log文件名输出的. 一,按照用户ID来生成log,这种情况,可以根据每个用户ID来动态生成logger. 代码如下: import or ...

  7. [Python3网络爬虫开发实战] 7.2-Splash的使用

    Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...

  8. Python之爬虫-京东商品

    Python之爬虫-京东商品 #!/usr/bin/env python # coding: utf-8 from selenium import webdriver from selenium.we ...

  9. 带FIFO的UART数据接收

    芯片手册 某个Cortex-M4芯片带有1个UART,支持Tx,Rx 的FIFO功能,而且可以通过寄存器配置FIFO的阈值,芯片的datasheet并不完善,没有说明RX的FIFO具体有几个级别,每隔 ...

  10. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...