欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 入门Java编程的知识点—>socket的使用(day19)

入门Java编程的知识点—>socket的使用(day19)

2025/1/19 14:41:55 来源:https://blog.csdn.net/Z0412_J0103/article/details/141590311  浏览:    关键词:入门Java编程的知识点—>socket的使用(day19)
  • 了解socket使用
项目目标:

实现本地的客户端与服务器一问一答.

Socket

1 .IP
1.1什么是IP?

IP是根据TCP/IP协议划定,由32位二进制数组成,而且在因特网上是唯一的数值

例如:某台计算机,连上网的IP是:

11010101 01001001 11110000 11001100

为了便于记忆,会将这32位二进制数,每8位一组,每段之间用小数点分割

11010101.01001001.11110000.11001100

再将每八位转化为十进制

213.73.240.204

1.2 如何查看自己电脑的ip?
  1. 按win+R, 输入cmd,打开dos窗口

  2. 在dos窗口输入ipconfig

1.2 什么是端口号

  • 端口号(port number)就是计算机为了给每个网络程序分配一个独一无二的区别符,有了这些端口号,就可以准确定位到具体的程序。
  • 端口号是个整数,范围0-65535,就是当开启一个程序时,计算机就分配给应用程序一个端口.
Socket概述

在计算机领域中,Socket也被称为套接字编程,它是计算机之间进行通信的一种约定或者说是一种方式。

应用程序可以通过它发送或者接收数据,可以对其发送过来的内容像处理文件一样,打开、关闭或者读写等操作,套接字允许应用程序将I/O插入到互联网上,并与网络中的其他程序进行通信。

Socket常用方法
服务器端ServerSocket

在服务器端选择一个端口号,然后在指定的端口号上等待客户端发起的连接

构造方法:

ServerSocket(int port) 创建一个绑定特定端口号的服务器套接字
accept() 侦听并接受到发送到此套接字的连接
close() 关闭此套接字
客户端Socket

构造方法:

Socket(String host,int port) 创建一个套接字,并且连接到host,并且绑定端口号
getInputStream() 返回此套接字的输入流
getOutputStram() 返回此套接字的输出流
close() 关闭此套接字
项目步骤
分别在socket包下新建两个类:
Server
/*** 服务器*/
public class Server {/** * java.net.ServerSocket * ServerSocket 是运行在服务端的,它的主要工作: * 1:打开服务端口(客户端就是通过这个端口与服务端建立链接) * 2:监听该服务端口,一旦一个客户端链接,则会返回一个 Socket 实例,并通过这个 Socket 实例与链接的	      *   客户端进行交互  * 如果我们将 Socket 比喻为"电话",那么 ServerSocket 相当于是"总机"。 */ServerSocket serverSocket;public Server() {try {/***如果端口被占用则会报异常:* java.net.BindException:address already in use* 解决办法:*        更换端口号,直到运行成功为止.*/*/serverSocket = new ServerSocket(8088);//设置服务器端口号} catch (IOException e) {e.printStackTrace();}}public void start() {try {System.out.println("等待客户端链接");/**ServerSocket提供的重要方法*  Socket accept()*  该方法用户接受客户端的链接,并返回一个Socket实例与连接的客户端交互*  该方法是一个阻塞方法,调用后程序会卡住,直到一个客户端链接为止.*/Socket socket = serverSocket.accept();System.out.println("客户端已链接");InputStream input = socket.getInputStream();//获取输入流,接收客服端消息byte[] bytes = new byte[1024*10];//字节数组,用来将接收的消息进行存储int d = input.read(bytes);//目前发送的消息很少,不用循环读取,直接读取到bytes数组中String s = new String(bytes,0,d);//将读来的字节数组中的内容转换为String打印System.out.println(s);//打印OutputStream output = serverSocket.getOutputStream();//获取输出流output.write("服务器发:你好客服端!".getBytes("utf8"));//响应给客户端一句话} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {new Server().start();}
}
Client
package socket1;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;/*** 客户端*/
public class Client {/** * java.net.Socket 套接字,原意是插座 * Socket 封装了 TCP 协议的通讯细节,我们使用他可以与远端计算机建立 TCP 链接。* 并基于一堆流的 IO 操作完成与远端计算机的数据交换。 我们可以将Socket比喻为"电话"*/ Socket socket;public Client() {try {/** * 实例化Socket时就是与远端计算机建立连接的过程* 这里需要传入两个参数:* 1.服务器的ip地址,用于找到网络上对方的计算机 2.服务器端口,用于找到服务端计算机上的服务器应用程序*/ System.out.println("正在连接服务器");socket = new Socket("localhost", 8088);//1.ip地址  2.端口号System.out.println("已连接服务器");} catch (IOException e) {e.printStackTrace();}}public void start() {try {OutputStream output = socket.getOutputStream();//获取输出流,通过流发给服务器消息String message = "客户端发:服务器你好!";//消息内容output.write(message.getBytes("utf8"));//将消息内容转换为字节数组写出InputStream input = socket.getInputStream();//获取输入流,准备接收服务器返回的消息byte[] bytes = new byte[1024 * 10];int d = input.read(bytes);//将接受的消息存储给字节数组String s = new String(bytes, 0, d);//将字节数组的内容转换为StringSystem.out.println(s);//打印} catch (IOException e) {e.printStackTrace();} finally {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {new Client().start();}
}

上篇文章:入门Java编程的知识点—>Map(day18)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Z0412_J0103/article/details/141554619下篇文章: 入门Java编程的知识点—>Http协议(day20)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Z0412_J0103/article/details/141590909

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com