黑马程序员_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培训、期待与您交流!----------------------
- 黑马程序员_Java_网络编程(二)
- 黑马程序员_Java_网络编程(二)
- 黑马程序员_JAVA_网络编程
- 黑马程序员_JAVA_网络编程
- 黑马程序员_JAVA_网络编程
- 黑马程序员_JAVA_网络编程
- 黑马程序员_java_网络编程
- 黑马程序员_Java_网络编程
- 黑马程序员_Java_网络编程
- 黑马程序员_Java_网络编程(一)
- 黑马程序员_Java_网络编程(一)
- 黑马程序员:网络编程<二>
- 黑马程序员-- 网络编程(二)
- 黑马程序员----网络编程二
- 黑马程序员_JAVA_面向对象(二)
- 黑马程序员_JAVA_面向对象(二)
- 黑马程序员_JAVA_集合框架(二)
- 黑马程序员_Java_数据类型
- 【LeetCode】Sum Root to Leaf Numbers
- 2>&1
- Ubuntu12.04下安装MyEclipse10
- eoe:开篇-记录EOE源码学习过程
- 3366彩色砖块外挂
- 黑马程序员_Java_网络编程(二)
- LNK2001:无法解析的外部符号 错误常见解决方法
- sqlserver数据库代码为角色分配权限
- StringUtils与ArrayUtils部分重要函数使用
- 第四十二天【java虐我千百遍,我待java如初恋】
- python3初学应用-扒图
- Android项目实战--手机卫士--结束
- 10个鲜为人知的C#关键字
- 第四十三天【java虐我千百遍,我待java如初恋】