网络编程学习总结
2011-10-01 10:27
351 查看
一、网络编程概述
通信协议
通讯的规则
常见协议:TCP、 UDP
ip地址
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
端口号
用于标识进程的逻辑地址
有效端口: 0~65535,其中0~1024系统使用或保留端口。
二、网络模型
OSI参考模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP/IP参考模型
应用层
传输层
网际层
主机至网络层
三、IP地址
类 InetAddress
四、TCP和UDP通信协议
UDP
不需要建立连接。
数据源和目的封装到数据包中,大小限制在64k内。
不可靠,会丢包。
速度快。
TCP
通过三次握手完成连接,是可靠协议。
建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
效率稍低。
五、TCP--上传图片
服务端
单线程的服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,不能循环回来执行下次accept方法。所以暂时获取不到B客户端对象。
为了可以让多个客户端同时并发访问服务端。
服务端最好就是将每个客户端封装到一个单独的线程中,这样就可以同时处理多个客户端请求。
如何定义线程呢?
只要明确了每一个客户端要在服务端执行的代码即可,将该代码封装在run方法中。
代码如下:
六、浏览器客户端--自定义服务器
通信协议
通讯的规则
常见协议:TCP、 UDP
ip地址
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
端口号
用于标识进程的逻辑地址
有效端口: 0~65535,其中0~1024系统使用或保留端口。
二、网络模型
OSI参考模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP/IP参考模型
应用层
传输层
网际层
主机至网络层
三、IP地址
类 InetAddress
方法摘要 | |
---|---|
boolean | equals(Object obj) 将此对象与指定对象比较。 |
byte[] | getAddress() 返回此 InetAddress对象的原始 IP 地址。 |
static InetAddress[] | getAllByName(String host) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。 |
static InetAddress | )]getByAddress(byte[] addr) 在给定原始 IP 地址的情况下,返回 InetAddress对象。 |
static InetAddress | )]getByAddress(String host,byte[] addr) 根据提供的主机名和 IP 地址创建 InetAddress。 |
static InetAddress | getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。 |
String | getCanonicalHostName() 获取此 IP 地址的完全限定域名。 |
String | getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 |
String | getHostName() 获取此 IP 地址的主机名。 |
static InetAddress | getLocalHost() 返回本地主机。 |
int | hashCode() 返回此 IP 地址的哈希码。 |
boolean | isAnyLocalAddress() 检查 InetAddress 是否是通配符地址的实用例行程序。 |
boolean | isLinkLocalAddress() 检查 InetAddress 是否是链接本地地址的实用例行程序。 |
boolean | isLoopbackAddress() 检查 InetAddress 是否是回送地址的实用例行程序。 |
boolean | isMCGlobal() 检查多播地址是否具有全球范围的实用例行程序。 |
boolean | isMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。 |
boolean | isMCNodeLocal() 检查多播地址是否具有节点范围的实用例行程序。 |
boolean | isMCOrgLocal() 检查多播地址是否具有组织范围的实用例行程序。 |
boolean | isMCSiteLocal() 检查多播地址是否具有站点范围的实用例行程序。 |
boolean | isMulticastAddress() 检查 InetAddress 是否是 IP 多播地址的实用例行程序。 |
boolean | isReachable(int timeout) 测试是否可以达到该地址。 |
boolean | isReachable(NetworkInterface netif,int ttl,int timeout) 测试是否可以达到该地址。 |
boolean | isSiteLocalAddress() 检查 InetAddress 是否是站点本地地址的实用例行程序。 |
String | toString() 将此 IP 地址转换为 String。 |
UDP
不需要建立连接。
数据源和目的封装到数据包中,大小限制在64k内。
不可靠,会丢包。
速度快。
TCP
通过三次握手完成连接,是可靠协议。
建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
效率稍低。
五、TCP--上传图片
package day24; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class PicClient { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("127.0.0.1",4000); FileInputStream fis = new FileInputStream("d:\\1.bmp"); OutputStream out = s.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf)) != -1){ out.write(buf); out.flush(); } //告诉服务端数据已写完。 s.shutdownOutput(); fis.close(); out.close(); s.close(); } } class PicServer{ public static void main(String[] args) throws IOException{ ServerSocket ss = new ServerSocket(4000); Socket s = ss.accept(); InputStream in = s.getInputStream(); FileOutputStream fos = new FileOutputStream("d:\\b.bmp"); byte[] buf = new byte[1024]; int len = 0; while((len = in.read(buf)) !=-1){ fos.write(buf,0,len); fos.flush(); } fos.close(); s.close(); ss.close(); } }
服务端
单线程的服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,不能循环回来执行下次accept方法。所以暂时获取不到B客户端对象。
为了可以让多个客户端同时并发访问服务端。
服务端最好就是将每个客户端封装到一个单独的线程中,这样就可以同时处理多个客户端请求。
如何定义线程呢?
只要明确了每一个客户端要在服务端执行的代码即可,将该代码封装在run方法中。
代码如下:
package day24; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class PicClient { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("127.0.0.1", 4000); FileInputStream fis = new FileInputStream("d:\\1.bmp"); OutputStream out = s.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { out.write(buf); out.flush(); } // 告诉服务端数据已写完。 s.shutdownOutput(); fis.close(); out.close(); s.close(); } } class PicServer { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(4000); Socket s = null; while (true){ s = ss.accept(); new Thread(new PicThread(s)).start(); } } } class PicThread implements Runnable { Socket s = null; PicThread(Socket s) { this.s = s; } public void run() { try { InputStream in = s.getInputStream(); FileOutputStream fos; fos = new FileOutputStream("d:\\b"+Thread.currentThread().getName()+".bmp"); byte[] buf = new byte[1024]; int len = 0; while ((len = in.read(buf)) != -1) { fos.write(buf, 0, len); fos.flush(); } fos.close(); s.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
六、浏览器客户端--自定义服务器
package day24; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { public static void main(String[] args) throws IOException{ ServerSocket ss = new ServerSocket(40000); while(true){ Socket s = ss.accept(); OutputStream outs = s.getOutputStream(); outs.write("<html><font color='red' size='7' >hello ! I'm ok !</font></html>".getBytes()); outs.close(); s.close(); } } }
相关文章推荐
- 黑马程序员_Javase 网络编程学习总结
- java基础学习总结——网络编程
- Java网络编程实践和总结 --- URLConnection的学习
- Java------网络通信编程 之 菜鸟新手的学习总结
- “谈一谈网络编程学习经验“总结
- Linux网络编程学习总结
- 对前一段时间学习网络和多线程编程的总结
- Java开发实践 网络编程 学习、应用、总结
- 【学习日记】java网络编程知识点总结
- iOS学习总结之网络编程
- 网络编程学习总结(之client/server模型)
- 网络编程学习总结(之client/server模型)
- 龚博文linux网络编程前期学习总结
- Java基础学习总结(18)——网络编程
- Linux网络编程基础之二--UDP --Unix学习总结之四
- JavaSE学习总结第26天_网络编程
- 黑马程序员——Java编程语言学习总结 – 网络编程
- Java基础学习总结(18)——网络编程
- 黑马程序员---java网络编程学习总结
- 【tcp-ip学习总结】socket编程基础/网络编程基础