Java编写SIP协议
1、编写Server代码
package com.genersoft.iot.vmp.sip;
import javax.sip.*;
import javax.sip.message.*;
import javax.sip.header.*;
import java.util.*;public class SimpleSipServer implements SipListener {private SipFactory sipFactory;private SipStack sipStack;private SipProvider sipProvider;private MessageFactory messageFactory;private String ip = "127.0.0.1";public SimpleSipServer() {try {sipFactory = SipFactory.getInstance();sipFactory.setPathName("gov.nist");Properties properties = new Properties();properties.setProperty("javax.sip.STACK_NAME", "SimpleSipServer");properties.setProperty("javax.sip.IP_ADDRESS", ip);properties.setProperty("javax.sip.RETRANSMISSION_FILTER", "on");sipStack = sipFactory.createSipStack(properties);ListeningPoint listeningPoint = sipStack.createListeningPoint(ip, 5060, "udp");sipProvider = sipStack.createSipProvider(listeningPoint);sipProvider.addSipListener(this);messageFactory = sipFactory.createMessageFactory();} catch (Exception e) {e.printStackTrace();}}@Overridepublic void processRequest(RequestEvent requestEvent) {Request request = requestEvent.getRequest();System.out.println("Received Request: " + request.getMethod());if (request.getMethod().equals(Request.INVITE)) {try {Response response = messageFactory.createResponse(Response.OK, request);sipProvider.sendResponse(response);System.out.println("Sent 200 OK response to INVITE");} catch (Exception e) {e.printStackTrace();}}}@Overridepublic void processResponse(ResponseEvent responseEvent) {}@Overridepublic void processTimeout(TimeoutEvent timeoutEvent) {System.out.println("Transaction Timed Out");}@Overridepublic void processIOException(IOExceptionEvent exceptionEvent) {System.out.println("IO Exception");}@Overridepublic void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {System.out.println("Transaction Terminated");}@Overridepublic void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {System.out.println("Dialog Terminated");}public static void main(String[] args) {new SimpleSipServer();}
}
2、编写Client端代码
package com.genersoft.iot.vmp.sip;
import javax.sip.*;
import javax.sip.address.*;
import javax.sip.message.*;
import javax.sip.header.*;
import java.util.*;
public class SimpleSipClient implements SipListener {private SipFactory sipFactory;private SipStack sipStack;private SipProvider sipProvider;private AddressFactory addressFactory;private MessageFactory messageFactory;private HeaderFactory headerFactory;private String ip = "127.0.0.1";public SimpleSipClient() {try {sipFactory = SipFactory.getInstance();sipFactory.setPathName("gov.nist");Properties properties = new Properties();properties.setProperty("javax.sip.STACK_NAME", "SimpleSipClient");properties.setProperty("javax.sip.OUTBOUND_PROXY", ip+":5060/udp");properties.setProperty("javax.sip.IP_ADDRESS", ip);sipStack = sipFactory.createSipStack(properties);ListeningPoint listeningPoint = sipStack.createListeningPoint(ip, 5070, "udp");sipProvider = sipStack.createSipProvider(listeningPoint);sipProvider.addSipListener(this);addressFactory = sipFactory.createAddressFactory();messageFactory = sipFactory.createMessageFactory();headerFactory = sipFactory.createHeaderFactory();} catch (Exception e) {e.printStackTrace();}}public void sendInvite() {try {SipURI fromUri = addressFactory.createSipURI("client", ip);Address fromAddress = addressFactory.createAddress(fromUri);fromAddress.setDisplayName("Client");SipURI toUri = addressFactory.createSipURI("server", ip);Address toAddress = addressFactory.createAddress(toUri);toAddress.setDisplayName("Server");SipURI requestUri = addressFactory.createSipURI("server", ip+":5060");FromHeader fromHeader = headerFactory.createFromHeader(fromAddress, "client123");ToHeader toHeader = headerFactory.createToHeader(toAddress, null);CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L, Request.INVITE);CallIdHeader callIdHeader = sipProvider.getNewCallId();MaxForwardsHeader maxForwardsHeader = headerFactory.createMaxForwardsHeader(70);ViaHeader viaHeader = headerFactory.createViaHeader(ip, 5070, "udp", null);ContactHeader contactHeader = headerFactory.createContactHeader(fromAddress);ArrayList<ViaHeader> viaHeaders = new ArrayList<>();viaHeaders.add(viaHeader);Request request = messageFactory.createRequest(requestUri, Request.INVITE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwardsHeader);request.addHeader(contactHeader);ClientTransaction transaction = sipProvider.getNewClientTransaction(request);transaction.sendRequest();System.out.println("Sent INVITE request");} catch (Exception e) {e.printStackTrace();}}@Overridepublic void processRequest(RequestEvent requestEvent) {}@Overridepublic void processResponse(ResponseEvent responseEvent) {Response response = responseEvent.getResponse();System.out.println("Received Response: " + response.getStatusCode());}@Overridepublic void processTimeout(TimeoutEvent timeoutEvent) {System.out.println("Transaction Timed Out");}@Overridepublic void processIOException(IOExceptionEvent exceptionEvent) {System.out.println("IO Exception");}@Overridepublic void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {System.out.println("Transaction Terminated");}@Overridepublic void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {System.out.println("Dialog Terminated");}public static void main(String[] args) {SimpleSipClient client = new SimpleSipClient();client.sendInvite();}
}
3、使用wireshark抓包,看实际效果

相关文章:
Java编写SIP协议
1、编写Server代码 package com.genersoft.iot.vmp.sip; import javax.sip.*; import javax.sip.message.*; import javax.sip.header.*; import java.util.*;public class SimpleSipServer implements SipListener {private SipFactory sipFactory;private SipStack sipStack…...
大型语言模型LLM的核心概念
本文主要介绍了目前主流的,几个大型语言模型LLM的整个训练过程 通常分为下面的几个阶段 1. 预训练 采用互联网上的大量数据进行训练,这一阶段大模型LLM的主体已定,找出共性并且压缩成一个模型。模型的参数量不是越大越好,遵循合理…...
软件测试---网络基础、HTTP
一、网络基础 (1)Web和网络知识 网络基础TCP/IP 使用HTTP协议访问Web WWW万维网的诞生 WWW万维网的构成 (2)IP协议 (3)可靠传输的TCP和三次握手策略 (4)域名解析服务DNS ࿰…...
韩顺平0基础学java——第39天
p820-841 jdbc和连接池 1.JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。 2.Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。 3.jdbc原理图 JDBC带来的好处 2.JDBC带来的…...
Linux文件恢复
很麻烦 一般还是小心最好 特别恢复的时候 可能不能选择某个文件夹去扫描恢复 所以 删除的时候 用rm -i代替rm 一定小心 以及 探索下linux的垃圾箱机制 注意 一定要恢复到不同文件夹 省的出问题 法1 系统自带工具 debugfs 但是好像不能重启? testdisk 1、安装 …...
大数据的数据质量有效提升的研究
大数据的数据质量有效提升是一个涉及多个环节和维度的复杂过程。以下是从数据采集、处理、管理到应用等方面,对大数据数据质量有效提升的研究概述: 一、数据采集阶段 明确采集需求:在数据采集前,需明确数据需求,包括…...
Flink-CDC解析(第47天)
前言 本文主要概述了Flink-CDC. 1. CDC 概述 1.1 什么是CDC? CDC是(Change Data Capture 变更数据获取)的简称 ,在广义的概念上,只要是能捕获数据变更的技术,都可以称之为 CDC。 核心思想是,…...
二阶段测试
二阶段测试 1、部署框架前准备工作 服务器类型部署组件ip地址DR1调度服务器 主(ha01)KeepalivedLVS-DR192.168.168.21DR2调度服务器 备 (ha02)KeepalivedLVS-DR192.168.168.22web1节点服务器 (slave01)NginxTomcatMySQL 备MHA managerMHA node192.168.1…...
CSP-J模拟赛day1——解析+答案
题目传送门 yjq的吉祥数 题解 送分题,暴力枚举即可 Code #include<bits/stdc.h> using namespace std;int l,r; int num1,tmp0,q[10000],a[10000]; int k (int x){for (int j1;j<tmp;j){if (xq[j])return 0;}return 1; } int main(){while (num<100…...
【PostgreSQL案例】我要查的表没有在执行计划中
问题:查的表没有在执行计划中 sql: SELECT* FROM(SELECTA.column1 as "column1",--中间省略很多A字段A.column99 as "column99"fromtable_a Aleft join (SELECTlzl_idfromtable_a AAinner join table_b BB ON AA.lzl_key BB.lzl_…...
《程序猿入职必会(5) · CURD 页面细节规范 》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
操作系统面试知识点总结5
#来自ウルトラマンメビウス(梦比优斯) 1 IO管理概述 1.1 I/O 设备 I/O 设备的类型分类。 1.1.1 按使用特性 人机交互类外部设备,例如打印机、显示器等。存储设备,例如磁盘、光盘等。网络通信设备,例如网络接口等。 1…...
BigInteger和BigDecimal类
一、应用场景 1. BigInteger 类 目前,我们学过最大的是long类型,但是,在实际开发时候,很有可能遇见超出long类型范围的数,我们就需要用BigInteger类; ① add 加 ② subtract 减 ③ multiply 乘…...
2024最新Uniapp的H5网页版添加谷歌授权验证
现在教程不少,但是自从谷歌升级验证之后,以前的老教程就失效了,现在写一个新教程以备不时之需。 由于众所周知的特殊原因,开发的时候一定注意网络环境,如果没有梯子是无法进行开发的哦~ clientID的申请方式我就不再进…...
学习java第一百四十四天
Spring通知有哪些类型? 在AOP术语中,切面的工作被称为通知。通知实际上是程序运行时要通过Spring AOP框架来触发的代码段。 Spring切面可以应用5种类型的通知: 前置通知(Before):在目标方法被调用之前调用通…...
Meta 发布 Llama3.1,一站教你如何推理、微调、部署大模型
最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解…...
XSSFWorkbook 和 SXSSFWorkbook 的区别
在现代办公环境中,处理 Excel 文件是一个常见的任务。Apache POI 是一个流行的 Java 库,能够读写 Microsoft Office 文档。对于处理 Excel 文件,Apache POI 提供了 XSSFWorkbook 和 SXSSFWorkbook 两个类。本文将详细介绍这两个类的特点和适用…...
会议主题:NICE Seminar|神经组合优化方法的大规模泛化研究(南方科技大学王振坤副研究员)
数据增强 获得更多解 TSP问题 最优解与序列无关,数据增强 ICML 2024 Position Rethinking Post-Hoc Search-Based Neural Approaches for Solving Large-Scale Traveling Salesman Problems...
昇思25天学习打卡营第22天|CycleGAN图像风格迁移互换
相关知识 CycleGAN 循环生成网络,实现了在没有配对示例的情况下将图像从源域X转换到目标域Y的方法,应用于域迁移,也就是图像风格迁移。上章介绍了可以完成图像翻译任务的Pix2Pix,但是Pix2Pix的数据必须是成对的。CycleGAN中只需…...
《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>
前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
