黑马程序员-java基础网络编程(TCP)
2015-07-11 08:10
806 查看
——- android培训、java培训、期待与您交流! ———-
TCP:
1、建立连接,形成传输数据的通道。(面向连接)三次握手机制
2、在连接中进行大数据两传输()
3、通过三次握手完成连接,是可靠协议
4、必须建立连接,效率会稍低
Socket:
1、Socket就是为网络服务提供的一种机制。
2、通信的两端都有Socket。
3、网络通信其实就是Socket间的通信。
4、数据在两个Socket间通过IO传输。
一、Socket类
1、定义:
此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
注:套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。
2、常用方法:
常用的方法如下:
Socket(String host, int port) -> 创建一个流套接字并将其连接到指定主机上的指定端口号。
close() -> 关闭此套接字。 getInetAddress() -> 返回套接字连接的地址。 getInputStream() -> 返回此套接字的输入流。 getPort() -> 返回此套接字连接到的远程端口。 shutdownOutput() -> 禁用此套接字的输出流。
二、ServerSocket类
1、定义:
此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
注:服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。
2、常用方法:
常用的方法如下:
ServerSocket(int port) -> 创建绑定到特定端口的服务器套接字。
accept() -> 侦听并接受到此套接字的连接。 close() -> 关闭此套接字。 getInetAddress() -> 返回此服务器套接字的本地地址。
代码块
练习:客户端通过键盘录入用户名,服务端对这个用户名进行校验。package com.itheima4; import java.io.BufferedReader; import java.io.FileReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 需求: * 客户端通过键盘录入用户名。 * 服务端对这个用户名进行校验。 * * 如果该用户存在,则服务端显示xxx,已登陆。 * 并在客户端显示xxx,欢迎光临。 * * 如果该用户不存在,则服务端显示xxx,尝试登陆。 * 并在客户端显示xxx,该用户不存在 * * 最多登陆三次 * * 客户端: * 1、建立连接。 * 2、关联标准输入。 * 3、读完后发给服务器端。 * 4、读取反馈信息。 * 5、关闭资源。 * * @author jjy * */ class LoginClient{ public static void main(String[] args)throws Exception{ Socket s = new Socket("127.0.0.1",10001); //键盘输入 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //服务器端的网络发送 PrintWriter out = new PrintWriter(s.getOutputStream(),true); //接收服务器端的反馈信息 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //最多登陆三次 for(int x=0;x<3;x++){ //获得键盘输入的字符串 String line=bufr.readLine(); System.out.println("输入的姓名为:"+line); if(line==null) break; //往服务器端网络发送 out.println(line); //接收反馈信息 String info = bufIn.readLine(); System.out.println("info:"+info); //若"反馈信息"中包含"欢迎"两字,则退出循环 if(info.contains("欢迎")) break; } //关闭资源 bufr.close(); s.close(); } } class LoginThread implements Runnable{ private Socket s; LoginThread(Socket s){ this.s=s; } public void run(){ String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"....connected."); try{ //最多登陆三次 for(int i=0;i<< 4000 span class="hljs-number">3;i++){ //接收客户端发送的套接字 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //获得客户端发送的套接字 String name = bufIn.readLine(); if(name==null) break; //关联到本地d盘下的user.txt文件 BufferedReader bufr = new BufferedReader(new FileReader("D:\\user.txt")); //客户端的网络套接字 PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; boolean flag = false; //循环读取d盘下user.txt文件中字符串 while((line=bufr.readLine())!=null){ //如果相同,则修改标记,然后退出循环 if(line.equals(name)){ flag = true; break; } } if(flag){ System.out.println(name+",已登录"); out.println(name+",欢迎光临"); break; }else{ System.out.println(name+",尝试登陆"); out.println(name+",用户名不存在"); } } //关闭资源 s.close(); }catch(Exception e){ throw new RuntimeException(ip+"校验失败"); } } } class LoginServer{ public static void main(String[] args)throws Exception{ ServerSocket ss = new ServerSocket(10001); //通过多线程的方法,支持多个请求。 while(true){ //接收客户端发过来的套接字 Socket s = ss.accept(); //开启线程 new Thread(new LoginThread(s)).start(); } } } public class LoginDemo{ public static void main(String[] args)throws Exception{ } }
相关文章推荐
- 计算机网络面试题
- 计算机网络面试笔试题
- 黑马程序员-java基础网络编程(UDP)
- JAVA网络编程
- 如何实现从网络获取图片的缓存机制
- BAT网络运维常见面试题目总结
- 【http】生命周期和http管道技术 整理中
- HTTP协议研究
- [通信制式]手机网络制式常识
- [Android--USB]USB协议各个版本的关系_网络整理
- msl、ttl及rtt的区别—— TCP控制字段标志
- Android 如何使用网络图片资源
- iOS多线程与网络开发之多线程GCD
- 「深入 Exchange 2013」MAPI over HTTP实战配置
- muduo网络编程分包和解包(二)
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 01 NIO网络通信框架 Netty server和client的api
- 人工神经网络之感知器算法
- atitit.http get post的原理以及框架实现java php
- atitit.http get post的原理以及框架实现java php