发表时间:2022-03-25来源:网络
当我们打开百度,输入我们想要查找的某个关键词,之后点击百度一下,我们就收到了一个有着各种链接的网页。
这个过程,作为我们,就是客户端。
我们即发送了信息,也接收了信息。而对于百度网站来说,就像是服务器端,即接收了信息,也发送了信息。
综上,服务器和客户端是一个相对的概念。客户端先发送消息,再收到回复。服务器端先收到消息,然后在发送消息。
1.传输层协议
2.有链接
3.可靠协议
4.面向字节流
注意:
可靠协议:消息发送方发送完消息后,一定要确保对方收到消息
不可靠协议:消息发送方只管发消息,不需要知道对方有没有收到消息
1.我们从实现服务器开始。Java提供了这样的一个类,ServerSocket。我们通过实例化它的方式来创建一个服务器。注意一下,创建服务器需要一个参数port,port指的是端口号。我们知道一台计算机上运行着许多程序,那么,对于另一台计算机来说,它想要连接到这台计算机的这个程序,该如何做呢?首先当然是根据IP连接到这台计算机,那么,然后呢?就是通过我们的port端口号了。正常情况下,计算机会自动我们创建的程序分配一个port,但是,因为我们创建的是提供给别的计算机连接的服务器,所以我们需要指定一个端口号供给外部计算机来进行连接。注意一下,计算机有的端口号已经被其他程序占用了,要想查看,你可以通过在cmd命令行输入netstat -an来查询。在这里,我们给定我们的端口号为空闲的1234。
2.客户端的创建与服务器的创建差不多,只是要注意一下内容上的匹配。
1.服务器
package tcp.http1; /* 这个客户端服务器实现了简单的聊天功能,客户端和服务器可以互相发送任意多条消息 客户端:...... 服务器:...... 客户端:...... 服务器:...... */ import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /* 创建服务器套接字用ServerSocket 创建客户端套接字用Socket */ public class Server { public static void main(String[] args) throws IOException { //1.创建绑定到指定端口的服务器套接字 ServerSocket tcpServerSocket=new ServerSocket(1234); Scanner sc=new Scanner(System.in); while(true){ //2.服务器和客户端的链接,如果链接不上一直在这里停留 Socket cilentSocket=tcpServerSocket.accept(); InetAddress cilentAddress=cilentSocket.getInetAddress(); System.out.printf("有客户端 %s :%d 连接上来\n", cilentAddress.getHostAddress(), //客户端的IP cilentSocket.getPort() //客户端的端口号 ); //获取输入字节流 InputStream is=cilentSocket.getInputStream(); //字节流转换为字符流 InputStreamReader isReader=new InputStreamReader(is,"UTF-8"); //字符流转换缓冲字符流(主要是为了用它的 readLine() 方法) BufferedReader reader=new BufferedReader(isReader); //获取输出字节流 OutputStream os=cilentSocket.getOutputStream(); //从客户端得到的输出字节流 //将字节流转换为字符流(主要是为了用它的 println() 方法) PrintStream out=new PrintStream(os); String line; while((line=reader.readLine())!=null){ //从客户端读发来的消息 System.out.println("客户端:"+line); System.out.print("服务器:"); String response=sc.nextLine(); out.println(response); //输出到客户端 } } } }2.客户端
package tcp.http1; /* 客户端是先写后读(先发出请求,后得到回应) 服务器是先读后写(先收到请求,后发出回应) */ import java.io.*; import java.net.*; import java.util.Scanner; public class Client { public static void main(String[] args) throws IOException { Scanner sc=new Scanner(System.in); //1.创建一个客户端的套接字 Socket tcpClientSocket=new Socket(); //连接本机的IP地址 byte[] ipv4={127,0,0,1}; //服务器的IP地址 InetAddress serverAddress=InetAddress.getByAddress(ipv4); //服务器:IP+端口确定 SocketAddress serverSocketAddress=new InetSocketAddress(serverAddress,1234); //2.客户端连接服务器 tcpClientSocket.connect(serverSocketAddress); while(true){ System.out.print("客户端:"); String request=sc.nextLine(); // 通过字节流直接从客户端向服务器 写入请求 OutputStream os=tcpClientSocket.getOutputStream(); PrintStream out=new PrintStream(os,true,"UTF-8"); out.println(request); // 通过字节流直接从服务器向客户端 读取回复 InputStream is=tcpClientSocket.getInputStream(); InputStreamReader isReader=new InputStreamReader(is,"UTF-8"); BufferedReader reader=new BufferedReader(isReader); String response=reader.readLine(); //写出服务器回复的消息 System.out.println("服务器:"+response); } } }举个例子,假如两个人A,B要通信,他们使用一种信件交流的方法,并且规定好了信箱,一方把信件放在信箱里面,另一方就可以去看socket简单来说就是连接两个程序的信箱
127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
1.客户端运行结果
2.服务器端运行结果
宜搜小说快读版官方版下载v3.16.7 最新安卓版
26.47MB |资讯阅读
艾可直播app下载v5.1.46 安卓版
141.29MB |影音播放
epermarket这样生活app下载v6.1.9 安卓官方版
28.14MB |生活服务
万位车联官方版下载v3.1.19 安卓版
64.12MB |系统工具
驾驶伴侣官方版下载v12.10 安卓版
360.63MB |系统工具
linecamera小熊相机安卓版免费下载v17.5.3 官方最新版本
152.91MB |拍摄美化
弹唱小吉他软件下载v2.1.3 安卓手机版
30.73MB |社交娱乐
车车助手行车记录仪(carassist)下载v3.4.9 安卓版
23.63MB |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14