Java基础--网络编程下篇

------<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、在浏览器输入网址访问一台主机所做的操作:必须掌握!!!

图示:


        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值