TCP通信
客户端-Socket类
/*俩端通信时步骤:
1.服务端程序,需要先启动等待客户端的连接
2.客户端主动连接服务端,连接成功才能通信。服务端不可以主动连接客户端。
TCP协议–面向连接的通信协议,在传输数据前先在发送端和接收端建立逻辑连接,
然后再传输数据,它提供了俩台计算机之间可靠毫无差错的数据传输
–每次连接的创建都要经过“三次握手”,(请求、响应、确认),保证了传输数据安全性
在Java中,提供了俩个类用于实现TCP通信程序:
1.客户端:java.net.Socket类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,俩者建立连接开始通信。
2.服务端:java.net.ServerSocket类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。
*
-
类Socket,此类实现客户端套接字(也可以叫“【套接字】”,套接字表示俩台机器间通信的端点)
-
套接字=IP地址+端口号
-
作用:源计算机通过IP地址找到了目标计算机,而再通过端口号就可以找到目标计算机里的具体一个应用程序
-
分析?
客户端通过[IP地址]找到服务端,客户端通过[端口号]找到应用程序
所以
客户端Socket类里要用构造方法俩个参数里要带有IP地址、端口号
构造方法:Socket(String host ,int port)创建一个套接字—连接到指定目标主机上的指定端口号
参数:
String host:服务器主机的名称/服务器的IP地址
int port: 服务器的端口号
客户端与服务器端之间进行交互—使用流(字节流)
那么咋样获取流呢?
—使用Socket类中的成员方法getOutputStream();—获取到字节输出流OutputStream对象
—使用Socket类中的成员方法getInputStream();—获取字节输入流InputStream对象
那么流使用完要释放资源?
—使用Socket类中的成员方法close()—关闭套接字
============================================================================================
*
客户端实现步骤:
* 1.创建客户端对象Socket,构造方法中绑定(IP地址,端口号)
* 2.使用使用Socket类中的成员方法getOutputStream();---获取到字节输出流OutputStream对象
* 2.1再使用网络字节输出流OutputStream对象中的方法write();---给服务器发送数据
* 3.使用Socket类中的成员方法getInputStream();---获取字节输入流InputStream对象
* 3.1在使用网络字节输入流InputStream对象中的方法read();--- 读取服务端回写的数据
* 4.释放资源(Socket)
注意:
* 客户端与服务端进行交互,必须使用Socket类的方法获取流,不能使用自己创建的流
* 当我们创建客户端对象Socket的时候,请求服务器,然后和服务器建立连接通路
* 这时如果服务器没有启动,就会抛出异常!
* 这时如果服务器启动了,就与客户端进行交互
package Net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCP_Client {
public static void main(String[] args) throws IOException {
//1.
Socket socket = new Socket("127.0.0.1", 8888);
//2.
OutputStream ops = socket.getOutputStream();
//2.1
ops.write("你好服务器".getBytes());
//3
InputStream is = socket.getInputStream();
//3.1
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes, 0, len));
//4
socket.close();
}
}
//Exception in thread “main” java.net.ConnectException: Connection refused: connect
//不能连接,连接服务器异常
服务端-ServerSocket类
/*
-
TCP服务器端:接受客户端的请求,读取客户端发送的数据,给客户端回写数据
-
服务端:java.net.ServerSocket类表示。
-
构造方法:
-
ServerSocket(int port)---创建绑定特定套接字里的端口号
-
服务器端必须明确一件事情:必须知道是哪个客户端请求的服务器
-
所以需要通过服务器端的方法accept()获取客户端Socket对象 成员方法:Socket类型 accept();
-
服务器实现步骤:
-
1.创建服务端ServerSocket对象
-
*2.使用服务端ServerSocket对象的方法accept()—获取到请求客户端Socket对象
-
3.使用Socket类中的成员方法getInputStream();—获取字节输入流InputStream对象
-
3.1在使用网络字节输入流InputStream对象中的方法read();— 读取客户端发送的数据
-
4.使用使用Socket类中的成员方法getOutputStream();—获取到字节输出流OutputStream对象
-
4.1再使用网络字节输出流OutputStream对象中的方法write();—给客户端回写送数据
-
5.释放资源
-
*/
package Net; impor java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class TCP_Server { public static void main(String[] args) throws IOException { //1. ServerSocket serverSocket = new ServerSocket(8888); //*2. Socket s = serverSocket.accept(); //3 InputStream is = s.getInputStream(); //3.1 byte[] bytes = new byte[1024]; int len = is.read(bytes); System.out.println(new String(bytes, 0, len)); //4 OutputStream outputStream = s.getOutputStream(); //4.1 outputStream.write("收到谢谢".getBytes()); //5 s.close(); serverSocket.close(); } }
上一篇: 写了一个雷人的js游戏
推荐阅读
-
[Go] 轻量服务器框架基础TCP服务模块
-
读《 NFC:Arduino、Android与PhoneGap近场通信》 有感——智能的电磁场交互
-
Python实现TCP探测目标服务路由轨迹的原理与方法详解
-
利用Winsock控件实现局域网通信(一)
-
php开发安卓服务器之 php封装json xml通用app数据通信接口
-
php websocket 实现登录用户,点对点通信,该如何处理
-
HTTPS 通信原理及详细介绍
-
第二十七章 网络通信协议、UDP通信、TCP通信
-
Java第十八章-网络通信
-
Android的线程通信:消息机制原理(Message,Handler,MessageQueue,Looper),异步任务AsyncTask,使用JSON