linux下面的tcp编程

首先要建立服务器建立起socket,然后与本地的端口进行绑定,接着就开始接收客户端的请求并建立与它的连接,接下来,客户端发送的消息。

tcpserver.c代码:

int main()
{
	struct sockaddr_in server_sockaddr,client_sockaddr;
	int sin_size,recvbytes;
	int sockfd, client_fd;
	char buf[BUFFER_SIZE];

	/* 建立socket连接 */
	if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
	{
		perror("socket");
		exit(1);
	}

	printf("Socket id = %d\n",sockfd);

	/* 设置socket_in 结构体中相关的参数 */
	server_sockaddr.sin_family = AF_INET;               /* ipv4的协议 */
	server_sockaddr.sin_port = htons(PORT);             /* 设置端口 */
	server_sockaddr.sin_addr.s_addr = INADDR_ANY;       /* ip地址服务器这边的地址 */
	bzero(&(server_sockaddr.sin_zero),8);               /* 保持位数 */

	int i = 1; 				/* 允许重复使用本地地址与套接字进行绑定 */
	setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR, &i,sizeof(i));

	/* 绑定函数bind() */
	if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))== -1)
	{
		perror("bind");
		exit(1);
	}

	printf("bind success!\n");

	/* 调用listen()函数,创建未处理请求的队列 */
	if( listen(sockfd, MAX_QUE_CONN_NM) == -1)
	{
		perror("listen");
		exit(1);
	}
	printf("Listening....\n");

	/* 调用accept()function,waiting client connnectting */
	if((client_fd = accept(sockfd, (struct sockaddr *) & client_sockaddr,&sin_size)) == -1)
	{
		perror("accept");
		exit(1);
	}

	memset(buf,0,sizeof(buf));

	if((recvbytes = recv(client_fd,buf,BUFFER_SIZE,0)) == -1)
	{
		perror("recv");
		exit(1);
	}

	printf("Received a message :%s\n",buf);
	close(sockfd);
	exit(0);
}

客户端的程序:

#include "myinclude.h"
int main(int argc, char *argv[])
{
	int sockfd,sendbytes;
	char buf[BUFFER_SIZE];
	struct hostent *host;
	struct sockaddr_in serv_adr;

	if(argc < 3)
	{
		fprintf(stderr,"USAGE:./client Hostname(or ipaddress)Text\n ");
		exit(1);
	}
/* address resolution function */
	if((host = gethostbyname(argv[1])) == NULL)
	{
		perror("gethostbyname");
		exit(1);
	}

	memset(buf,0,sizeof(buf));
	sprintf(buf,"%s",argv[2]);
/* create socket */
	if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
	{
		perror("socket");
		exit(1);
	}
/* set up the structure-related parameters of sockaddr_in */
	serv_adr.sin_family = AF_INET;
	serv_adr.sin_port = htons(PORT);
	serv_adr.sin_addr = *((struct in_addr *)host->h_addr);
	bzero(&(serv_adr.sin_zero),8);
/* call connect function Initiate a connection to the server */
	if(connect(sockfd,(struct sockaddr *)&serv_adr,sizeof(struct sockaddr)) == -1)
	{
		perror("connect");
		exit(1);
	}
/* send messages to server */
	if((sendbytes = send(sockfd,buf,strlen(buf),0))==-1)
	{
		perror("Send");
		exit(1);
	}

	close(sockfd);
	exit(0);
}

验证程序

时间: 2024-10-08 21:24:57

linux下面的tcp编程的相关文章

Linux下的C编程实战

Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux.RTLinux.ARM-Linux等等. 在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源.它包含TCP/IP协议栈.它易集成GUI. 鉴于Linux操作系统在服务器和嵌入式系统领

Linux下C++的编程——开发环境搭建与第一个程序

上一篇文章Linux下C++的编程--开偏介绍中我们已经介绍了GUN.GCC.G++等一些重要的概念,现在应该开始动手实践了! 开发工具的安装 环境 Distributions版本:CentOS 6.7 Linux内核片:2.6.32-573.3.1.el6.i686 一般Linux安装完之后默认就已经安装了GCC(GNU Compiler Collection),你可以查看一下gcc和g++的版本号检查gcc和g++是否已经安装. [luowf@luoweifu ~]$ gcc -v gcc

Linux下C++的编程——GDB进行程序调试

GDB简介 我们在Linux下C++的编程--开偏介绍一文中已经简单介绍了GDB的功能,是类Unix系统的主要调试工具,可进行断点调试,跟踪程序,动态改变执行环境等功能. 从一个程序开始调试 下面我们就从一个程序开始讲解一下GDB的简单用法.假设我们有如下的程序: GDBTest1.cpp #include <iostream> int Accumulation(int n) { int result = 0; for(int i = 0; i < n; i ++) { result +

Linux下的shell编程入门

通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者shell脚本来实现. 一.简介 Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂.Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux一个接着一个地解释和执行每个命令. 下面我们来看一个简单的shell程序: 1.首先建立一个

linux下的时钟编程

1.时钟相关的API函数原型 #include <unistd.h> unsigned int sleep(unsigned int seconds); unsigned int alarm(unsigned int seconds); int usleep(useconds_t usec); #include <sys/time.h> int getitimer(int which, struct itimerval *curr_value); int setitimer(int

Linux 下的 UDP 编程

2019-10-14 关键字:C 语言的 UDP 编程与实例 UDP 连接是一种无连接的网络连接协议. Linux 下的 UDP 编程的函数接口与 TCP 差不了多远.在 UDP 通信模型中,也是以 C/S 模型来通信的. 服务端的函数调用流程主要有以下几个: 1.socket() 2.bind() 3.recvfrom() / sendto() 4.close() 客户端的函数调用流程主要有以下几个: 1.socket() 2.sendto() / recvfrom() 3.close() s

Linux下C++的编程——开偏介绍

C++是一个功能强大而又应用广泛的计算机语言,就应用领域而言,几乎无所不在,因为有操作系统的地方就会有C++的存在,热门程序而言,也就仅次于C和Java.而C与C++又有天然的血缘关系. 从事C++开发近两年,虽然开发的产品都是跨平台的,但个人直接接触到的编程工程还是更偏重于Windows平台(至少开发环境更多的是在Windows平台,还写过"带你玩转Visual Studio"系列的博文),而现在要自己独立地带领一个项目的开发,还是一个跨平台的项目,也就有必要到Linux下C++的编

LINUX下C语言编程基础

实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 二.实验步骤 1. 快捷键 Ubuntu中: 2. vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人

linux下的bash编程简要学习

linux下的bash编程简要学习     1.bash是什么: linux运行时系统只会运行系统运行所需要的运行脚本即系统守护进程,一般根据用户自己需求设定和实现的服务需要手动启动,这种服务进程通常由bash启动,脚本中的命令通常被按照一定规则被bash读取视作参数,因此在脚本头部要申明运行的bash类型,bash命令分为内建命令及外部命令,外部命令通过PATH进行依次查找. bash读取命令后将其启动(fork)成为一个进程,依次启动服务     2.bash控制语句:         本地