⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtsp_sock.c

📁 最基本的rtsp client 程序
💻 C
字号:
/*--------------------------------------------------------	COPYRIGHT 2007 (C) DVN (Holdings) Ltd (Hongkong)	AUTHOR:		wangry@dvnchina.com	PURPOSE:	kasenna simple rtsp lib	CREATED:	2007-12-10	MODIFICATION HISTORY	Date        By     Details	----------  -----  ---------------------------------------------------------------*/#include "rtsp_client.h"#include <arpa/inet.h>#include <netdb.h>static int rtsp_lookup_server_address (rtsp_client_t *client){	const char *server_name;	in_port_t server_port;	struct hostent *host;	server_name = client->server_name;	server_port = client->server_port;	if (inet_aton(server_name, &client->server_addr) != 0)	{		return 0;	}	host = gethostbyname(server_name);	if (host == 0)	{		RTSP_ERR("can't get host address, host=%s\n", server_name);		return -1;	}	client->server_addr = *(struct in_addr*)host->h_addr;	return 0;}int rtsp_create_socket (rtsp_client_t *client){	struct sockaddr_in sockaddr;	int ret;	if (client->server_socket != -1)	{		RTSP_ALERT("socket is opened\n");		return 0;	}	if (client->server_name == 0)	{		RTSP_ERR("server name is null, create socket fail\n");		return -1;	}	if (rtsp_lookup_server_address(client) != 0)	{		return -1;	}	client->server_socket = socket(AF_INET, SOCK_STREAM, 0);	if (client->server_socket == -1)	{		RTSP_ERR("Couldn't create socket\n");		return -1;	}	sockaddr.sin_family = AF_INET;	sockaddr.sin_port = htons(client->server_port);	sockaddr.sin_addr = client->server_addr;	ret = connect(client->server_socket, (struct sockaddr *)&sockaddr, sizeof(sockaddr));	if (ret < 0)	{		close(client->server_socket);		client->server_socket = -1;		RTSP_ERR("couldn't connect socket\n");		return -1;	}	/*todo: 加入connect超时*/		return 0;}int rtsp_send_sock (rtsp_client_t *client, const char *buffer, int len){	return send(client->server_socket, buffer, len, 0);}int rtsp_receive_socket (rtsp_client_t *client, char *buffer, int len){	int ret;	fd_set read_set;	struct timeval t;	if (client->recv_timeout != 0)	{		FD_ZERO(&read_set);		FD_SET(client->server_socket, &read_set);		t.tv_sec = client->recv_timeout / 1000;		t.tv_usec = (client->recv_timeout % 1000) * 1000;		ret = select(client->server_socket + 1, &read_set, 0, 0, &t);		if (ret <= 0)		{			RTSP_INFO("socket recv timed out, timeout=%d ret=%d\n", client->recv_timeout, ret);			return -1;		}	}	ret = recv(client->server_socket, buffer, len, 0);	return ret;}void rtsp_close_socket (rtsp_client_t *client){	if (client->server_socket != -1)	{		close(client->server_socket);	}	client->server_socket = -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -