黑马程序员_Java_网络编程(二)

来源:互联网 发布:java 主线程sleep 编辑:程序博客网 时间:2024/05/16 08:33

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!----------------------

一.TCP基础


           1.TCP与UDP区别
                          面向连接, 数据安全, 区分服务器端和客户端.


           2.TCP客户端
                         创建客户端Socket, 指定连接到服务器的地址和端口号, 并尝试连接


                          Socket socket = new Socket("192.168.1.220", 8888);


                          连接成功之后获取输入输出流


                          socket.getInputStream();


                          socket.getOuputStream();


                          获取流之后就可以通过输入输出流发送和读取数据了, 客户端的输入流连接服务端输出流, 客户端输出流连接服务端输入流


 3.TCP服务端
                      创建服务端ServerSocket, 需要指定端口号. 客户端连接的也就是这个端口.


                      ServerSocket serverSocket = new ServierSocket(8888);


                      服务端创建之后可以获取客户端连接, 返回一个Socket对象, 这个Socket就是和客户端连接的Socket


                       Socket socket = serverSocket.accept();


                       服务端获取这个socket的输入输出流, 就可以和客户端发送接收数据了


                        socket.getInputStream();


                       socket.getOutputStream();


 4.多线程服务器
                   服务器一般是为多个客户端同时服务的, 当每个客户端连接到服务器时, 可以开一条单独的线程处理这个连接.


 5.获取ip及端口号
                  客户端和服务端都可以通过Socket获取ip及端口号


                   socket.getInetAddress().getHostAddress();


                    socket.getPort();
  
二.telnet工具
         1.使用telnet
                      telnet是windows系统提供的客户端工具, 指定ip地址和端口号就可以访问服务器


          2.使用方式
                     telnet ip地址 端口号
                     telnet 192.168.1.220 8888


          3.设置回显(如果自己输入的内容看不见时设置)
                         telnet
                         set localecho
                       在输入的时候如果看不到回显, 按 ctrl+], 回车


           4.配置Path
                       需要将telnet.exe所在目录配置到path环境变量中才能使用


            5.telnet特点
                       在telnet中输入一个字符串的时候, 逐个字节发送.


 
三.文件上传
       1.服务端
                  1 创建ServerSocket, 绑定端口
                  2 在循环中等待接收请求
                  4 接收到请求之后, 交给一条线程处理
                  5 获取输入输出流
                  6 向客户端发送欢迎语: 连接成功, 请输入上传文件路径:
                  10 读取文件路径, 判断是否存在
                  11 根据是否存在, 向客户端输出结果.
                  14 从socket的in流中读取数据, 写出到一个FileOutputStream中, 这个文件输出流关联到服务器上的一个文件
  
         2.客户端
                        3 创建Socket, 指定ip地址端口号, 尝试连接
                        5 获取输入输出流
                        7 接收数据, 显示
                        8 从键盘读取一个路径, 判断是否存在(客户端), 是否是文件夹
                        9 将文件名发送至服务器(为了让服务器验证是否存在)
                        12 判断服务端发送的结果, 如果服务端存在该文件那么程序结束, 如果服务端不存在该文件准备开始上传
                        13 定义一个FileInputStream读取文件, 将内容写出到socket的out流中.
  
         3.细节问题
                   上传结束之后服务端向客户端发送上传完毕.
                    如果客户端不关闭socket, 那么服务端读取不到-1, 上传的循环无法结束.
                    如果客户端关闭socket, 那么服务端无法再传输数据.
                    那么我们就需要在不关闭socket的情况下结束while循环.
                    可以再客户端上传文件之前先将文件的大小传给服务器.
                    服务器每次循环之后判断文件大小, 如果文件大小等于客户端传过来的大小,

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!----------------------

0 0