与网络开发相关的API
java面向的是 浏览器/服务器 开发。B/S
C/S结构:客户端对服务端 //需要设置一个客户端。如简单的网络聊天室,qq、微信、LOL。
B/S结构:浏览器对服务器 //通用的,不需要单独的设置一个客户端了。
浏览器和服务器必须遵循HTTP协议进行交互,使用TCP来进行服务器和浏览器来建立连接。
我们是写服务端的,上层应用层协议指的是http协议,而底下走的传输协议是TCP协议
java.net.Socket封装了TCP通讯协议的操作细节。java中想完成TCP协议通讯就依靠这个API即可。使用它与服务端连接后,通过操作两个流即可完成与服务端的数据交换。
实际上通讯是指两台计算机应用程序之间互相发送数据
通过ip找到对应的具体哪一台计算机,通过端口号找到的对应的具体哪一个应用程序 。
就跟客户像10086打电话一样,10086号码理解为是ip地址;打通后按不同数字号提供不同服务理解为端口号。
Socket类
java.net.Socket
使用它进行 客户端对服务端连接操作
构造器
Socket socket = new Socket("localhost",8088) //参数分别为 1.服务端的IP地址,如果服务端为本地可写localhost 2.服务端的服务端口号。实例化的过程就是连接的过程 若连接失败,会抛出服务器积极拒绝异常
API
OutputStream getOutputStream() //该方法可以获取一条字节输出流,通过这个流写出的数据会被发送给远端(例如服务端)
OutputStream是一个所有字节输出流的父类,是一个抽象类,虽然用OutputStream接收 但是返回一定是某个子类。不需要关心接受的实际子类是什么,只要返回的是个输出流就行了
InetAddress address getInetAddress() //获取远端计算机地址信息。
String getHostAddress() //是InetAddress类的方法,以字符串形式获取远端计算机IP地址 如:127.0.0.1
ServerSocket类
java.net.ServerSocket
使用它进行 服务端对客户端连接
运行再服务端的java.net.ServerSocket 主要有两个作用
1.向系统申请服务端口,客户端就是通过该端口与服务端建立连接的
2.监听服务端口,一旦客户端发起连接则会自动的创建一个Socket套接字与该客户端进行交互
构造器
serverSocket = new ServerSocket(8088) //参数为向系统申请的端口号,端口号被占用则抛出地址被使用的异常
API
Socket accept( ) //是一个阻塞方法,调用后就开始等待客户端的连接 ,直到一个客户端连接,那么该方法会返回一个Socket。服务端可以通过这个Socket与刚建立连接的客户端进行交互,如果想要多个客户端连接 需要多次调用accept 这时就需要用到多线程了。
InputStream getInputStream( ) //获取一条字节输入流 同上
若想要连接多个客户端,就要用到多线程。
思路是 :客户端连接服务器以后,服务器可以拿到一个Socket,然后创建一个线程,把Socket交给这个线程
这个时候这个线程跑起来就单独运行了,就像当于客户端和这个线程在交互。就不影响服务器在调用accept,等待下一个客户端连接了。