SRT Socket连接超时问题求助及默认测试地址端口咨询
SRT Socket连接超时(错误码1001)问题求助
我在本地服务器连接SRT Socket时遇到连接超时问题,错误码为1001,错误日志截图如下:
请问有没有可用于测试Socket连接代码的默认SRT Socket地址及端口?以下是我的代码:
- (IBAction)onSender:(id)sender { int yes = 1; const char ipAddress [] = "192.168.112.45:8000"; printf("srt startup\n"); srt_startup(); printf("srt create socket\n"); srtSocket = srt_create_socket(); if (srtSocket == SRT_ERROR) { // fprintf(stderr, "srt_socket: %s\n", srt_getlasterror_str()); [NSException raise:[@(srt_getlasterror(nil)) stringValue] format:@"%s", srt_getlasterror_str()]; } printf("srt bind address\n"); struct sockaddr_in socketAddrIN; memset(&socketAddrIN, 0, sizeof(socketAddrIN)); socketAddrIN.sin_family = AF_INET; socketAddrIN.sin_port = htons(1234); inet_pton(AF_INET, ipAddress, &socketAddrIN.sin_addr); printf("srt set socket flag\n"); srt_setsockflag(srtSocket, SRTO_SENDER, &yes, sizeof(yes)); printf("srt connect\n"); int result = srt_connect(srtSocket, (struct sockaddr *)&socketAddrIN, sizeof(socketAddrIN)); if (result == SRT_ERROR) { // fprintf(stderr, "srt_connect: %s\n", srt_getlasterror_str()); [NSException raise:[@(srt_getlasterror(nil)) stringValue] format:@"%s", srt_getlasterror_str()]; } srt_close(srtSocket); srt_cleanup(); }
问题排查与解决方案
代码中的核心错误
inet_pton函数仅支持解析纯IP地址,你传入的ipAddress包含了:8000端口后缀,会导致地址解析失败,直接引发连接超时。需将IP和端口拆分处理:const char ipAddress [] = "192.168.112.45"; // ... socketAddrIN.sin_port = htons(8000); // 替换原代码中的1234,使用目标服务端口- 作为SRT客户端,无需手动执行
bind操作(除非有特定端口需求),客户端会自动分配随机本地端口,可直接删除bind相关代码段,简化逻辑。
本地测试用SRT服务搭建
没有公共通用的SRT测试地址,你可以用SRT官方工具快速搭建本地测试服务:- 使用
srt-live-transmit启动监听服务:srt-live-transmit srt://:8000 null://
该命令会在本地8000端口启动SRT监听,接收数据后直接丢弃,适合快速验证客户端连接逻辑。
- 使用
额外排查建议
- 确认目标服务器的8000端口未被防火墙/安全组拦截(SRT基于UDP协议);
- 用
srt-test工具先验证网络连通性:srt-test -s 192.168.112.45:8000
内容的提问来源于stack exchange,提问作者NøBi Mac
相关产品推荐
相关产品推荐

