TCP协议模拟用户登录
2015-11-26 17:05
239 查看
首先来回顾一下TCP协议的特点:(请点我),在通信的两台设备之间建立连接通道,因为建立连接,传输可靠一些,但是速度会慢一些。TCP协议又称为三次握手协议,因为建立过程有三步,发送请求、获取反馈、建立连接。
需求:通过TCP协议模拟用户登录,服务器端通过验证,则显示“您好,欢迎使用!”;否则返回“用户不存在!请重新输入“
1、建立服务器端
<span style="font-size:14px;">public class ServerDemo {
public static void main(String[] args) throws IOException {
// 创建服务器Socket对象,端口号设置为12306
ServerSocket ss = new ServerSocket(12306);
// 监听客户端对象,此方法在客户端未连接之前一直处于阻塞状态
Socket s = ss.accept(); //此方法返回一个Socket对象,可以调用Socket方法
// 获取输入流,需要使用转换流将字节流转换为字符流
// s.getInputStream()返回一个服务器与客户端之间的输出流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// 获取输出流,true表示将缓冲区中的数据输出
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
String line = br.readLine();
if ("yuefei".equals(line)) { //正确的用户名应该是yuefei
pw.println("欢迎使用!");
} else {
pw.println("用户不存在!请重新输入");
}
// 释放资源
s.close();
ss.close();
}
}
</span>2、创建客户端
<span style="font-size:14px;">public class ClientDemo {
public static void main(String[] args) throws IOException {
// 创建客户端Socket对象
Socket s = new Socket("192.168.3.100", 12306);
// 获取输出流
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
pw.println("yuefei"); //假定客户端输入的是正确的用户名
// 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = br.readLine();
System.out.println("line:" + line);
// 释放资源
s.close();
}
}</span> 程序正确的运行过程应该是:首先开启服务器,服务器处于监听状态,然后客户端与服务器建立连接,由于建立了连接,客户端可以向服务器端发送数据,然后客户端向服务器端发送了”yuefei“用户名,服务器端接收并进行验证,验证成功,然后向客户端发送”欢迎使用!“,客户端进行接收。
附:广播地址。
广播地址是每一个网段的最后一个地址,假如对于192.168.26网段来说,192.168.26.255就是这个网段的广播地址。在广播地址发送的数据,该网段的所有IP地址所在的计算机都会收到,所以称之为”广播“。
小结:TCP协议中,应该首先开启服务器端,因为它们之间要建立连接,不开服务器会因为找不到服务器而报错;而对于UDP协议就不必开始,它们之间不建立连接,而且UDP协议并不保证接收端一定会受到发送数据。
需求:通过TCP协议模拟用户登录,服务器端通过验证,则显示“您好,欢迎使用!”;否则返回“用户不存在!请重新输入“
1、建立服务器端
<span style="font-size:14px;">public class ServerDemo {
public static void main(String[] args) throws IOException {
// 创建服务器Socket对象,端口号设置为12306
ServerSocket ss = new ServerSocket(12306);
// 监听客户端对象,此方法在客户端未连接之前一直处于阻塞状态
Socket s = ss.accept(); //此方法返回一个Socket对象,可以调用Socket方法
// 获取输入流,需要使用转换流将字节流转换为字符流
// s.getInputStream()返回一个服务器与客户端之间的输出流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// 获取输出流,true表示将缓冲区中的数据输出
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
String line = br.readLine();
if ("yuefei".equals(line)) { //正确的用户名应该是yuefei
pw.println("欢迎使用!");
} else {
pw.println("用户不存在!请重新输入");
}
// 释放资源
s.close();
ss.close();
}
}
</span>2、创建客户端
<span style="font-size:14px;">public class ClientDemo {
public static void main(String[] args) throws IOException {
// 创建客户端Socket对象
Socket s = new Socket("192.168.3.100", 12306);
// 获取输出流
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
pw.println("yuefei"); //假定客户端输入的是正确的用户名
// 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = br.readLine();
System.out.println("line:" + line);
// 释放资源
s.close();
}
}</span> 程序正确的运行过程应该是:首先开启服务器,服务器处于监听状态,然后客户端与服务器建立连接,由于建立了连接,客户端可以向服务器端发送数据,然后客户端向服务器端发送了”yuefei“用户名,服务器端接收并进行验证,验证成功,然后向客户端发送”欢迎使用!“,客户端进行接收。
附:广播地址。
广播地址是每一个网段的最后一个地址,假如对于192.168.26网段来说,192.168.26.255就是这个网段的广播地址。在广播地址发送的数据,该网段的所有IP地址所在的计算机都会收到,所以称之为”广播“。
小结:TCP协议中,应该首先开启服务器端,因为它们之间要建立连接,不开服务器会因为找不到服务器而报错;而对于UDP协议就不必开始,它们之间不建立连接,而且UDP协议并不保证接收端一定会受到发送数据。
相关文章推荐
- 计算机网络---基础题目汇总三
- 安卓中关于图片从网络获取,压缩,上传,下载,缩略图,缓存的一些处理总结(四)
- 解决安全扫描HTTP的不安全方法
- 科普:TLS、SSL、HTTPS以及证书(转)
- 黑马程序员——java基础--网络编程
- 计算机网络常用知识
- codevs 1922 骑士共存问题||二分图||最大独立集||二分图匹配||Dinic与匈牙利算法的讨论||网络流
- 理解长短期记忆网络(LSTM NetWorks)
- 能量函数在神经网络中的意义
- 使用HttpWebRequest发送自定义POST请求
- 虚拟机VirtualBox中centos6.5网络设置
- http://www.sufeinet.com/thread-655-1-1.html
- 二叉搜索树-BST-查找算法-插入算法-删除算法 http://www.cnblogs.com/pangxiaodong/archive/2011/08/24/2151060.html
- Unix网络编程---第四次作业
- 分享:基于神经网络的Visual C++阿拉伯数字训练和识别程序
- HttpClient调用webApi时注意的小问题
- Android Volley框架的使用(四)图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- 负载均衡之Haproxy配置详解(及httpd配置)
- android studio 首次进入问题 Internal error. Please report to https://code.google.com/p/android/issues
- 在IIS上启用Gzip压缩(HTTP压缩)