`
jiq408694711
  • 浏览: 36546 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Linux中的TCP通信

 
阅读更多

客户端:

#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>
#include <fcntl.h>

int main(void){
	int c_fd;
	struct sockaddr_in s_addr;	/*linux套接字地址需转化成通用sockaddr结构地址*/
	char buf[MAXLINE] = "hello server!\n";

	/* (1) 建立套接字 */
	if((c_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)
		printf("socket error\n");

	//初始化服务器端地址
	s_addr.sin_family = AF_INET;
	inet_pton(AF_INET,"127.0.0.1",(void *)&s_addr.sin_addr.s_addr,INET_ADDRSTRLEN);
	s_addr.sin_port = htons(5000);
	
	/* (2) 请求连接服务器(在通信套接字上) */
	if(connect(c_fd,(struct sockaddr *)&s_addr,sizeof(s_addr)) < 0)
		printf("connect error\n");

	/* (3) 在该套接字上发送(接收)数据 */
	if(send(c_fd,"hello server",MAXLINE,0) < 0) 
		printf("send error\n");
	if(recv(c_fd,buf,MAXLINE,0) < 0) 
		printf("reccv error\n");
	printf("server send: %s\n",buf);

	/* (4) 关闭套接字 */
	close(c_fd);

	exit(0);
}

服务器端:

#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>

int main(void){
	int reuse = 1;
	struct sockaddr_in s_addr;/*linux套接字地址需转化成通用sockaddr结构地址*/
	int r_fd,s_fd;
	char buf[MAXLINE];

	/* (1)建立STREAM套接字 */
	if((r_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)
		printf("socket error\n");

	/*
		注意:当客户端正在和服务器端通信,此时客户端在等待接收服务器端消息。
		但是服务器却退出了,尝试重启,但是根本无法重启,而是会显示“bind error”。
		这是由于该地址(IP+端口号)已经被绑定到一个套接字的原因。
		TCP不允许重复绑定一个地址,除非超时以后这个地址才能重新被绑定。
		---但是可以使用setsocketopt()函数设置套接字选项,使得当前与该套接字
		绑定的地址可以被重复绑定 !!!
	*/
	setsockopt(r_fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(int));

	/* (2)绑定用于接收请求的套接字和服务器地址 */
	s_addr.sin_family = AF_INET;
	s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	s_addr.sin_port = htons(5000);
	if(bind(r_fd,(struct sockaddr *)&s_addr,sizeof(s_addr)) < 0)
		printf("bind error\n");
	
	/* (3)宣告服务器通信端可以接受连接请求 */
	if(listen(r_fd,5) < 0) printf("listen error\n");

	/* (4)等待客户连接:若accept()返回,则建立连接,返回一个新套接字(用于通信) */
	for(;;){
		printf("waiting for ask...\n");
		fflush(stdout);
		//不关心客户端sockaddr地址
		s_fd = accept(r_fd,NULL,NULL);

		/* (5)在该套接字上面读写(处理请求) */
		if(recv(s_fd,buf,MAXLINE,0) < 0)
			printf("recv error\n");
		if(send(s_fd,"OK,I have recevied your quest\n",MAXLINE,0) < 0)
			printf("send error\n");
		if(send(s_fd,"O",1,MSG_OOB) < 0)
			printf("send error\n");
		printf("client send: %s\n",buf);
	}
	/* (6)关闭新套接字和原始套接字 */
	close(r_fd);
	close(s_fd);

	exit(0);
}
分享到:
评论

相关推荐

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

    在Linux操作系统中,TCP(传输控制协议)是网络通信中常用的一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信通常用于需要稳定性和数据完整性的重要应用,如网页浏览、电子邮件和文件传输等。本压缩包...

    基于嵌入式Linux的TCP通信异常问题.pdf

    本篇文章主要讨论基于嵌入式Linux的TCP通信异常问题,通过对Linux操作系统和TCP通信机制的分析,解决了Linux在通信过程中发生的问题,并对类似的TCP通信问题具有借鉴和指导意义。 一、Linux操作系统和TCP通信机制 ...

    linux下TCP通信模块

    在Linux操作系统中,TCP(Transmission Control Protocol)是一种广泛使用的网络通信协议,它是互联网协议...通过深入研究源代码,开发者可以更好地掌握C语言在TCP通信中的应用,以及如何构建可扩展和可靠的网络服务。

    linux下tcp通信

    在Linux中,TCP通信主要通过套接字API实现。首先,创建一个套接字,使用`socket()`函数,指定协议族(AF_INET代表IPv4,AF_INET6代表IPv6)和套接字类型(SOCK_STREAM代表TCP)。 ```c int socket_fd = socket(AF_...

    tcp_client.zip_LINUX TCP _TCP通信_linux 网络通信_linux tcp client_lin

    1. **套接字API**:在Linux中,TCP通信基于套接字API,它是操作系统提供的用于网络通信的接口。创建TCP客户端的第一步是调用`socket()`函数创建一个套接字描述符,这通常使用`AF_INET`作为地址家族和`SOCK_STREAM`...

    Linux C++ TCP Socket通信实例

    Socket是网络通信中的接口,它允许程序通过网络进行通信。在Linux系统中,我们使用`&lt;sys/socket.h&gt;`头文件来创建和操作Socket。 1. **创建Socket**:使用`socket()`函数创建一个Socket,参数包括协议族(如AF_INET...

    Linux下tcp通信程序

    本文将深入探讨Linux下实现TCP通信程序的关键知识点,包括客户端、服务器的编程逻辑、多线程的应用以及可能存在的问题。 首先,TCP通信的基础是套接字(Socket)接口,它是操作系统提供的一种API,允许应用程序进行...

    tcp.rar_linux TCP 封装_linux tcp通信库

    本篇将深入探讨标题"tcp.rar_linux TCP 封装_linux tcp通信库"所涉及的Linux TCP封装和通信库的构建。 首先,TCP协议在Linux中的实现主要由内核处理,它包含了建立连接(三次握手)、数据传输、错误检测与恢复、...

    基于LINUX的TCP/IP网络通信研究

    基于LINUX的TCP/IP网络通信研究 基于LINUX的TCP/IP网络通信研究 基于LINUX的TCP/IP网络通信研究

    ARM linux 和上位机windows10进行TCP/IP网络通信

    在本文中,我们将深入探讨如何实现ARM Linux与Windows 10上位机之间的TCP/IP网络通信。这个主题涉及多个技术领域,包括操作系统间的通信、网络编程以及特定的编程语言和库。以下是一份详细的概述: 1. **TCP/IP协议...

    Linux+Ubuntu+QT Tcp通信,分为客户端和服务端

    在这个项目中,“Linux+Ubuntu+QT Tcp通信”涉及的是使用QT库在Linux Ubuntu环境下实现TCP/IP协议的客户端和服务端通信。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了数据...

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

    本文将深入探讨如何在Linux环境中实现Modbus TCP协议。 首先,理解Modbus协议是必要的。Modbus协议最初是为串行通信设计的,但现在已扩展到支持TCP/IP网络。它定义了一种主-从架构,其中有一个或多个主设备可以向一...

    linux windows tcp通讯

    总的来说,Linux和Windows之间的TCP通信是通过socket编程实现的,涉及到网络编程的基本概念和API调用。通过学习和实践,你可以掌握如何在不同操作系统间构建稳定、高效的通信通道。记得检查提供的代码和文档,它们会...

    基于LINUX的TCP通信

    本主题将深入探讨“基于LINUX的TCP通信”,特别关注如何使用TCP协议通过SOCKET进行服务器和客户端之间的数据交互。首先,我们需要理解TCP(传输控制协议)是面向连接的、可靠的传输协议,它确保了数据的完整性和顺序...

    linux下的tcp通信

    这是linux下的tcp通信示例代码,具体请参考: http://blog.csdn.net/htttw/article/details/7519964

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

    在TCP(传输控制协议)中,心跳包是一种保持连接活性的机制,主要用于检测网络连接是否仍然有效,防止因网络静默导致的连接超时或断开。本篇将详细讲解如何使用C语言在Linux平台上实现TCP心跳包的功能,并探讨其核心...

    linux下TCP通信,客户端和服务端源码

    在TCP通信中,还需要注意错误处理,例如检查函数返回值,以及可能出现的阻塞问题。对于多客户端并发连接,服务端可能会采用多线程或异步I/O模型,如epoll,来处理多个连接。 此外,TCP协议提供了一组可靠性机制,如...

    linux下TCP-IP通信

    在Linux环境下进行TCP/IP通信是网络编程中的一个基础任务,涉及到多方面的知识。TCP/IP协议栈是互联网通信的核心,它提供了可靠的数据传输服务。在这个场景中,我们有服务器端(Server)和客户端(Client)两个部分...

    基于Linux的TCP/IP通信

    基于Linux的TCP/IP通信,已经调试成功,可以直接运行。

    linux ipv6简单tcp/udp socket通信

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

Global site tag (gtag.js) - Google Analytics