[代码片段] 创建TCP套接字

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <poll.h>
#include <pthread.h>
#include <pwd.h>
#include <netdb.h>
#include <fcntl.h>
#include <arpa/inet.h>

int transport_connect_socket(const char* host/*127.0.0.1*/, const char* port/*2228*/) {
	int i, flags, sock = -1;
	struct addrinfo hints, *res_list, *res;

	/* Connect to a server */
	memset(&hints, 0, sizeof hints);
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;
	i = getaddrinfo(host, port, &hints, &res_list);
	if (i != 0) {
		fprintf(stderr, "Unable to translate the host address (%s).", gai_strerror(i));
		return (-1);
	}

	for (i = 0, res = res_list; res != NULL; res = res->ai_next) {
		sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
		if (sock == -1) {
			/* socket was not created, try another resource */
			i = errno;
			goto errloop;
		}

		if (connect(sock, res->ai_addr, res->ai_addrlen) == -1) {
			/* network connection failed, try another resource */
			i = errno;
			close(sock);
			sock = -1;
			goto errloop;
		}

		/* make the socket non-blocking */
		if (((flags = fcntl(sock, F_GETFL)) == -1) || (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1)) {
			fprintf(stderr, "Fcntl failed (%s).", strerror(errno));
			close(sock);
			return -1;
		}

		/* we're done, network connection established */
		break;
errloop:
		fprintf(stdout, "Unable to connect to %s:%s over %s (%s).", host, port,
				(res->ai_family == AF_INET6) ? "IPv6" : "IPv4", strerror(i));
		continue;
	}
	freeaddrinfo(res_list);

	if (sock == -1) {
		fprintf(stderr, "Unable to connect to %s:%s.", host, port);
	}

	return (sock);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USRP N321 是一款软件定义无线电设备,可用于接收和发送无线电信号。要将 USRP N321 连接到地面设备进行无线通信,可以使用 TCP/IP 协议进行连接。以下是一个简单的示例代码,演示如何在 Linux 系统上使用 USRP N321 进行 TCP/IP 通信。 首先,需要在 Linux 系统上安装 UHD(USRP Hardware Driver)软件包。可以使用以下命令进行安装: ``` sudo apt-get install -y libuhd-dev uhd-host ``` 安装完成后,可以使用以下命令检查 USRP 是否正常工作: ``` uhd_usrp_probe ``` 接下来,可以使用以下代码片段将 USRP N321 与地面设备建立 TCP 连接: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <uhd.h> #define BUFSIZE 1024 int main(int argc, char *argv[]) { char *address = "192.168.10.2"; // USRP N321 的 IP 地址 int port = 8888; // TCP 端口号 // 创建 TCP 套接字 int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket"); exit(EXIT_FAILURE); } // 连接 USRP N321 struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(address); addr.sin_port = htons(port); if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { perror("connect"); exit(EXIT_FAILURE); } // 初始化 USRP N321 uhd_usrp_handle usrp; uhd_error_t status = uhd_usrp_make(&usrp, ""); if (status != UHD_ERROR_NONE) { fprintf(stderr, "Failed to make USRP handle.\n"); exit(EXIT_FAILURE); } uhd_usrp_set_rx_rate(usrp, 1e6, 0); // 接收数据 char buf[BUFSIZE]; while (1) { int nbytes = recv(sockfd, buf, BUFSIZE, 0); if (nbytes == -1) { perror("recv"); exit(EXIT_FAILURE); } if (nbytes == 0) { printf("Connection closed by server.\n"); break; } // 处理接收到的数据 printf("Received %d bytes: %.*s\n", nbytes, nbytes, buf); } // 关闭 TCP 连接 close(sockfd); return 0; } ``` 上述代码中,我们首先创建了一个 TCP 套接字,并使用 `connect()` 函数连接到 USRP N321。然后,我们初始化 USRP N321,并使用 `recv()` 函数从 TCP 连接中接收数据。最后,我们关闭 TCP 连接。 需要注意的是,上述代码片段仅提供了一个简单的示例,实际的应用程序可能需要进行更多的配置和处理,以适应具体的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值