您的位置:首页 > 理论基础 > 计算机网络

Java基础--网络编程下篇

2015-01-14 22:53 316 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

网络基础--应用
实例一:用TCP客户端并发上传图片

1:单线程上传的思路Day24\UploadPic.java

客户端

        1.服务端点。

        2.读取客户端已有的图片数据

        3.通过Socket输出流将数据发给服务端
发送完毕,标记发送状态
//告诉服务端数据已写完,利用Socket的shutdownOutput方法
s.shutdownOutput();

        4.读取服务端反馈信息。

        5.关闭

服务端

        1.服务端服务,并监听窗口

        2.获取客户端对象,并获取客户ip

        3.读取客户端输入流数据

        4.写入文件

        5.用客户端输出流反馈信息

        6.关流

2:图片上传(多线程) Day24\UploadPicByThread.java

单线程的服务端有个局限性。当A客户端连接上以后,被服务端获取到。服务端执行具体流程。

这时B客户端连接,只能等待。因为服务端还没有处理完A客户端的请求。还没有循环回来执行下一次accept方法。

所以,暂时获取不到B客户端对象。

那么为了可以让多个客户端同时并发访问服务端。服务端最好就是将每个客户端封装到

一个单独的线程中,这样,就可以同时处理多个客户端请求。

如何定义线程呢?

        只要明确了每一个客户端要在服务端执行的代码,将该代码存入run方法即可。

实例二:客户端并发登录
Day24\UserLogin.java

要求:
客户端通过键盘录入用户名,服务端对这个用户名进行校验。
如果该用户存在,在服务端显示xxx,已登陆;并在客户端显示xxx,欢迎光临。
如果用户不存在,在服务端显示xxx,尝试登陆;并在客户端显示xxx,该用户不存在。
最多就登录三次。

实例三:客户端和服务的浏览器演示  JavaWeb课程时候有详细介绍关于http协议和Tomcat服务器
Tomcat服务器和ie浏览器之间的演示,Tomcat内部ServerSocket

        浏览器是一个标准的客户端,它可以对服务端传送过来的数据消息进行解析,
把符合应用层协议的消息部分解析后,将头信息拆包掉,传送到应用层,只保留了
正确的正文主题部分显示在主体部分上。

        而由于使用java编译是在传输层和网际层处理的,所以,会接受到全部的消息,
包含了头消息。而浏览器处于应用层,已将发送来的头消息去除,只留下了主体信息。

实例四:URL和URLConnection

1、URL:

        URI:范围更大,条形码也包含于此范围 统一资源定位符URI(Uniform Resource Identifiers)

        URL:范围较小,即域名
方法:
(1)构造函数:URL(String protocol,String host,int port,String file);//根据指定 protocol、host、port号和 file 创建 URL对象。
(2)String getProtocol();//获取协议名称
(3)String getHost();//获取主机名
(4)int getPort();//获取端口号
(5)String getFile();//获取URL文件名
(6)String getPath();//获取此URL的路径部分
(7)String getQuery();//获取此URL的查询部,客户端传输的特定信息
注:一般输入网址,是不带端口号的,此时可进行获取,通过获取网址返回的port,
若port为-1,则分配一个默认的80端口,如
int port = getPort();
if(port == -1)
     port = 80;

2、URLConnection 3G的时候也会用到很重要
方法:
1)URLConnection openConnection();//用URL调用此方法,返回一个 URLConnection 对象,
它表示到 URL 所引用的远程对象的连接。
2)InputStream getInputStream();//获取输入流,底层封装的是Socket的getInputStream()方法
3)OutputStream getOutputStream();//获取输出流 。。。

小知识点

1、Socket类的构造函数中,有一个空参数的构造函数:

        Socket()//通过系统默认类型的 SocketImpl创建未连接套接字对象

       可以通过connect(SocketAddress endpoint)方法来连接服务器。

       而SocketAddress是一个抽象类,子类InetSocketAddress,此类实现IP套接字地址(封装了IP地址 + 端口号)。

       InetAddress代表IP地址,

2、ServerSocket对象中的构造函数:

        ServerSocket(int port,int backlog),其中的backlog表示队列的最大长度,能连接到服务器的客户端的同时最大个数,即最大连接数。

3、在浏览器输入网址访问一台主机所做的操作:必须掌握!!!
图示:



        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: