Java学习之socket网络编程篇

Java学习之socket网络编程篇0x00前言在一些工具开发中,最离不开的可能就是网络编程了,例如目录扫描器、端口扫描、包括exp这些其实都是依赖于socket。就拿简单的exp来说其实就是已

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java学习之socket网络编程篇

0x00 前言

在一些工具开发中,最离不开的可能就是网络编程了,例如目录扫描器、端口扫描、包括exp这些其实都是依赖于socket。就拿简单的exp来说其实就是已经构造好的一段payload,然后使用socket发送网络请求过去,然后利用漏洞获取到一个shell。

0x01 socket类概述

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。

注意事项:

1. 服务端程序,需要事先启动,等待客户端的连接。
2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。

在Java中,提供了两个类用于实现TCP通信程序:

  1. 客户端:java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
  2. 服务端:java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。

0x02 Socket使用

查看构造方法:

Socket(String host, int port) 
    创建一个流套接字并将其连接到指定主机上的指定口号。

构造方法实例:

Socket client = new Socket("127.0.0.1", 6666);

成员方法:

getInputStream() 
          返回此套接字的输入流
getOutputStream() 
          返回此套接字的输出流
 void bind(SocketAddress bindpoint) 
          将套接字绑定到本地地址。 
 void close() 
          关闭此套接字。 
 void connect(SocketAddress endpoint) 
          将此套接字连接到服务器。 

0x03 ServerSocket使用

构造方法:

ServerSocket(int port) 
          创建绑定到特定端口的服务器套接字。

常用方法:

accept() 
    侦听并接受到此套接字的连接。
bind(SocketAddress endpoint, int backlog) 
    将 ServerSocket 绑定到特定地址(IP 地址和端口号)。 
 void close() 
          关闭此套接字 


0x04 Socket 代码实例

客户端代码:

public static void main(String[] args) throws IOException {
        Socket client = new Socket("127.0.0.1",8080);
        OutputStream os = client.getOutputStream();
        os.write("nihao".getBytes());
        os.close();
        client.close();
        

    }

创建一个socket对象,构造方法对其传入参数,使用getOutputStream获取一个套接字输出流,然后对其写出字符。这里的字符传输时,需要转换为byte类型。

服务端:

 public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(8888);
        System.out.println("监听中");
        Socket server = ss.accept();
        InputStream is = server.getInputStream();
        byte[] b = new byte[1024];

        int len = is.read(b);
        String msg = new String(b,0,len);
        System.out.println(msg);
        is.close();
        server.close();
    }
    

使用serversocket类实例化一个对象,使用accept接收套接字的连接,连接时候会生成新的套接字,使用新的套接字获取套接字输入流,读取客户端传入的数据进行打印。

0x05 结尾

这篇文章比较短,不知道该写点什么案例来做演示。JaveSE的部分暂时也告一段落了,开始步入JavaWeb部分。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119949.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • layui弹出层表单

    layui弹出层表单弹出层表单很常见,也很实用,无论是在’pc端网页还是在移动端.现在用layui来实现一下这个表单吧.html<formclass=”layui-form”id=”test”style=”display:none”><divclass=”layui-form-item”><labelclass=”layui-form-label”>…

  • delay函数的用法及声明

    delay函数的用法及声明在VC中使用带上头文件#include注意:在VC中Sleep中的第一个英文字符为大写的”S”在标准C中是sleep,不要大写..下面使用大写的来说明,,具体用什么看你用什么编译器.简单的说VC用Sleep,别的一律使用sleep.Sleep函数的一般形式:Sleep(unisgnedlong);其中,Sleep()里面的单位,是以毫秒为单位

  • SNMP协议详解

    SNMP协议详解SNMP协议详解简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。…

    2022年10月17日
  • ThreadPool.QueueUserWorkItem启动慢

    ThreadPool.QueueUserWorkItem启动慢一、问题描述ThreadPool.QueueUserWorkItem启动慢,在项目过程中发现当线程数量达到一定量的时候发线线程启动速度慢,影响了正常的实时性业务。二、解决方法加入ThreadPool.SetMinThreads(1000,1000)后,整个进程启动变块。如图1和图2,变快了。…

  • Unity插件——Odin使用心得(一)「建议收藏」

    Unity插件——Odin使用心得(一)「建议收藏」声明:本文章为作者对Odin插件常见功能的学习笔记,仅用于学习用途.插件在活动打折时购买,本人不提供插件下载链接.系列文章目录Unity插件——Odin使用心得(一)Unity插件——Odin使用心得(一)系列文章目录一.开发环境二.使用前准备三.常用功能讲解1.命名空间2.AssetsOnly\SceneObjectsOnly:引用限制为预制体\场景物体3.Delayer:延迟赋值4.DetailedInfoBox:信息提示–标题/内容5.EnableGUI:激活GUI6.GUIColo.

  • OpenProcessToken LookupPrivilegeValue 和AdjustTokenPrivilege[通俗易懂]

    OpenProcessToken LookupPrivilegeValue 和AdjustTokenPrivilege[通俗易懂]OpenProcessToken函数功能用来打开与进程相关联的访问令牌函数申明WINADVAPIBOOLWINAPIOpenProcessToken(_In_HANDLEProcessHandle,_In_DWORDDesiredAccess,_Outptr_PHANDLETokenHandle);第一个参数ProcessHandle[in],输入参数,要打开的访问令牌所属的进程句柄,查询进程必须拥有PROCESS_QUERY_INF

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号