`

linux c tcp

阅读更多

linux 下可用 c 进行 tcp 通信,使用 server / client,

 

例子:

 

* server

/**
 * tcp server
 * @date: 2011-4-1 下午03:34:27
 * @author: eric
 */
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

static int SERVER_PORT = 10001;
static int MAX_REQUEST_QUEUE = 5;
static int MAX_DATA_SIZE = 100;
/**
 * start tcp server
 */
int tcpserver() {
	int sockfd, newfd;
	struct sockaddr_in server_addr, client_addr;
	char buf[MAX_DATA_SIZE + 1];

	// create socket
	sockfd = socket(AF_INET, SOCK_STREAM, 0);

	// set server address
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	server_addr.sin_addr.s_addr = INADDR_ANY;

	// bind
	if (bind(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr)) == -1) {
		perror("bind error\n");
		return 1;
	}

	// listen
	if (listen(sockfd, MAX_REQUEST_QUEUE) == -1) {
		perror("listen error\n");
		return 1;
	}

	int recv_size;
	int sin_size = sizeof(struct sockaddr_in);
	while (1) {
		// accepte
		if ((newfd = accept(sockfd, (struct sockaddr *) &client_addr, &sin_size)) == -1) {
			perror("accept error\n");
			continue;
		};
		printf("server: accept connection from %s:%d\n", inet_ntoa(client_addr.sin_addr), client_addr.sin_port);

		// receive data
		if ((recv_size = recv(newfd, buf, MAX_DATA_SIZE, 0)) == -1) {
			perror("recv error\n");
			continue;
		}
		if (recv_size) {
			buf[recv_size] = '\0';
			printf("receive:\t%s\n", buf);
		}

		char *s_send = "hi client!";
		// send data
		if (send(newfd, s_send, strlen(s_send), 0) == -1) {
			perror("send error\n");
			continue;
		} else {
			printf("send:\t%s\n", s_send);
		}

		// close incomming socket
		close(newfd);
		printf("\n");
	}
	return 0;
}
int main() {
	return tcpserver();
}

 

 

* client

/**
 * tcp client
 * @date: 2011-4-1 下午03:39:12
 * @author: eric
 */
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

static char *SERVER_HOST = "127.0.0.1";
static int SERVER_PORT = 10001;
static int MAX_DATA_SIZE = 100;
/**
 * start tcp client
 */
int tcpclient() {
	int sockfd;
	struct sockaddr_in server_addr;
	char buf[MAX_DATA_SIZE + 1];

	// create socket
	sockfd = socket(AF_INET, SOCK_STREAM, 0);

	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	server_addr.sin_addr.s_addr = inet_addr(SERVER_HOST);

	// connect
	if ((connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))) == -1) {
		perror("connect error\n");
		return 1;
	} else {
		printf("connected to server %s:%d\n", inet_ntoa(server_addr.sin_addr), ntohs(server_addr.sin_port));
	}

	char *s_send = "hi server!";
	// send data
	if ((send(sockfd, s_send, strlen(s_send), 0)) == -1) {
		perror("send error\n");
		return 1;
	} else {
		printf("send:\t%s\n", s_send);
	}

	int recv_size;
	// receive data
	if ((recv_size = recv(sockfd, buf, MAX_DATA_SIZE, 0)) == -1) {
		perror("recv error\n");
		return 1;
	}
	if (recv_size) {
		buf[recv_size] = '\0';
		printf("receive:\t%s\n", buf);
	}

	// close socket
	close(sockfd);
	return 0;
}

int main() {
	return tcpclient();
}

 

分享到:
评论

相关推荐

    linux C语言TCP/IP协议连接通讯

    在Linux环境中,使用C语言实现TCP/IP协议进行通信是一项基础且重要的技能,广泛应用于网络编程。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而IP(Internet ...

    TCP通信心跳包源码C语言实现

    本篇将详细讲解如何使用C语言在Linux平台上实现TCP心跳包的功能,并探讨其核心原理。 TCP是一种面向连接的、可靠的传输层协议,它通过三次握手建立连接,并通过确认应答和重传机制确保数据的可靠传输。然而,在长...

    linux下用C写的基于SSL 的TCP例子代码!

    在Linux环境下,使用C语言编写基于SSL(Secure Socket Layer)的TCP程序是一项常见的任务,尤其在开发安全通信软件时。SSL是一种网络安全协议,用于在Internet上提供加密通信和身份验证。下面将详细介绍如何在Linux...

    linux 平台, modbus tcp 协议的简单实现

    在Linux平台上实现Modbus TCP协议是一项常见的任务,特别是在工业自动化和物联网(IoT)领域。Modbus是一种广泛应用的通信协议,允许设备之间进行数据交换,而TCP(Transmission Control Protocol)是网络层的一种传输...

    基于Linux的TCP多人聊天室

    C语言编写,采用CS模型,TCP、UDP网络协议实现的内网多人聊天室。 服务器:采用多线程以及线程锁处理客户端的所有请求以及信息转发任务。服务端实时显示客户的登录与登出信息;保存客户上传的共享文件(网盘功能);...

    一种非常简单的Linux C tcp client驱动代码

    这是一个最简单的Linux C语言tcp client端驱动代码,其中tcp_client.c、tcp_client.h两个文件是封装的tcp client驱动,main.c是demo例程。 使用该驱动可以最快地测试tcp client端的交互逻辑。

    linux c tcp server

    本文将深入探讨如何在Linux环境下使用C语言实现一个简单的TCP服务器,涉及的知识点包括TCP/IP协议基础、套接字编程、多路复用I/O以及程序结构设计。 首先,TCP是一种面向连接的、可靠的传输协议,它在数据传输前会...

    linux环境C语言tcp聊天室

    Linux环境下使用C语言实现的TCP聊天室是一种基于网络通信的多用户交互系统,它利用TCP/IP协议栈进行数据传输,可以在Ubuntu操作系统上运行。这个项目不仅提供了基本的文字聊天功能,还支持客户端之间的文件上传和...

    linux ipv6简单tcp/udp socket通信

    linux下ipv6简单的tcp/udp socket通信,代码测试通过,具体可以参考: http://blog.csdn.net/zhengxianghdu/article/details/14106167

    linuxC版TCP客户端和服务端源码

    总的来说,`linuxC版TCP客户端和服务端源码`提供了学习TCP通信基础和网络编程的良好素材。通过阅读和理解这两份源码,你可以深入理解TCP协议的工作原理,以及如何在Linux环境下使用C语言实现客户端和服务端的交互。...

    linux tcp keepalive存活代码设置

    TCP存活可以通过修改系统设置或者在tcp应用代码里面设置,本demo的是在tcp应用里面设置。原理是:对于一个已经建立的tcp连接。如果在keepalive_time时间内双方没有任何的数据包传输,则开启keepalive功能的一端将...

    基于Linux的TCP多线程网络聊天室源码(内含Makefile)

    在本项目中,我们探索的是一个基于Linux操作系统利用C语言实现的TCP多线程网络聊天室。这个项目的核心目标是让学习者深入了解TCP协议以及如何在Linux环境下利用多线程技术构建一个网络通信应用。下面将详细介绍其中...

    linux-TCP.rar_LINUX TCP _Linux 网络 编程_linux c_linux tcp传输_tcp lin

    标签中包含了“linux_tcp”、“linux网络编程”、“linux_c”和“tcp_linux”,这进一步强调了我们要讨论的是在Linux环境中使用C语言进行TCP网络编程的相关知识。C语言是一种底层语言,非常适合用于编写系统级的程序...

    Linux下C实现的TCP文件传输源码.zip

    本压缩包中的"Linux下C实现的TCP文件传输源码"提供了实现TCP/IP协议的文件传输功能的源代码示例。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于保证数据的...

    Linux下TCP通信测试代码,包含服务端和客户端

    这份代码示例可以帮助开发者理解和学习如何在Linux环境下使用C语言或者C++实现TCP通信,这对于系统编程、网络编程的学习和实践非常有价值。通过阅读和运行这些代码,你可以了解到TCP通信的基本流程、套接字API的使用...

    Linux_Tcp.rar_LINUX TCP _linux TCP_tcp linux

    本文将深入探讨Linux下的TCP编程,包括TCP套接字(socket)的工作原理、C/S架构的实现以及相关的TCP/Linux优化策略。 首先,TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三次握手建立连接,并...

    linux C TCP/UDP客户端服务端的相互实时通信

    在Linux环境中,使用C语言开发TCP和UDP协议的客户端与服务端进行实时通信是一项常见的任务。TCP(传输控制协议)和UDP(用户数据报协议)是网络编程中的两种主要的传输层协议,它们各有特点,适用于不同的场景。 ...

    c语言开发的linux下tcp工具

    c语言开发的linux下tcp工具,其他tcp服务端和客户端测试网络连接

    基于Linux的C语言TCP银行交易系统设计源码

    本源码项目是基于Linux的C语言TCP银行交易系统设计,包含232个文件,主要使用C语言编程。该项目是一个银行交易系统,通过TCP协议在Linux环境下运行。系统提供了银行交易的基本功能,包括账户管理、存款、取款、转账...

    linux下tcp通信

    在Linux操作系统中,TCP(Transmission Control Protocol)是一种广泛使用的传输层协议,为应用程序提供可靠、面向连接的数据通信服务。TCP确保数据的正确顺序传输、无损传输以及通过拥塞控制来优化网络性能。本教程...

Global site tag (gtag.js) - Google Analytics