[国嵌攻略][093][并发服务器设计]

server.c

#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#define SERVER_PORT 3333

void main(){
 	//创建标识
	int serverfd;

	serverfd = socket(AF_INET, SOCK_STREAM, 0);   //建立TCP连接

	//绑定地址
	struct sockaddr_in serverAddr;

	serverAddr.sin_family = AF_INET;                   //设置协议
	serverAddr.sin_port = htons(SERVER_PORT);          //设置端口
	serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);    //设置地址
	bzero(serverAddr.sin_zero, 8);                     //设置为零

	bind(serverfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));

	//监听端口
	listen(serverfd, 10);

	while(1){
		//等待连接
		socklen_t clientAddrLen;
		struct sockaddr_in clientAddr;
		int clientfd;

		clientAddrLen = sizeof(struct sockaddr);
		clientfd = accept(serverfd, (struct sockaddr *)&clientAddr, &clientAddrLen);

		//创建进程
		int pid;

		pid = fork();
		if(pid == 0){
			//接收数据
			char buffer[2048];

			recv(clientfd, buffer, sizeof(buffer), 0);

			//显示数据
			char *clientIPAddr;

			clientIPAddr = (char *)inet_ntoa(clientAddr.sin_addr.s_addr);
			printf("server recvice from %s:\n%s", clientIPAddr, buffer);

			//关闭连接
			close(clientfd);
			close(serverfd);

			//结束进程
			exit(0);
		}

		//关闭连接
		close(clientfd);
	}

	//关闭连接
	close(serverfd);
}

client.c

#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>

#define SERVER_PORT 3333

int main(int argc, char **argv){
	//参数检查
	if(argc != 2){
		printf("Usage:\n\t./client <ip address>\n");
		return -1;
	}

	//创建标识
	int clientfd;

	clientfd = socket(AF_INET, SOCK_STREAM, 0);   //建立TCP连接

	//建立连接
	struct sockaddr_in serverAddr;

	serverAddr.sin_family = AF_INET;                   //设置协议
	serverAddr.sin_port = htons(SERVER_PORT);          //设置端口
	serverAddr.sin_addr.s_addr = inet_addr(argv[1]);   //设置地址
	bzero(serverAddr.sin_zero, 8);                     //设置为零

	connect(clientfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));

	//输入数据
	char buffer[2048];

	printf("client send to %s:\n", argv[1]);
	fgets(buffer, sizeof(buffer), stdin);

	//发送数据
	send(clientfd, buffer, sizeof(buffer), 0);

	//关闭连接
	close(clientfd);

	return 0;
}
时间: 2024-11-09 02:23:55

[国嵌攻略][093][并发服务器设计]的相关文章

[国嵌攻略][073][静态函数库设计]

外部函数 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别 系统调用在Linux内核中位于核心态,而函数库是由工程师提供位于用户态 函数库分类 函数库按照链接方式可以分为静态函数库和动态函数库 存放位置 Linux应用程序使用的主要函数库均存放于/lib,/usr/lib目录下,其中以*.so.*方式命名的是动态函数库,而以*.a方式命名的是静态函数库. 静态链接库的特点 程序所要用到的库函数代码在链接时全部被拷贝到程序中.如果有多个进程在内存中同时运行,并且使用了

[国嵌攻略][061][2440LCD驱动设计]

LCD初始化 1.引脚初始化 2.时序初始化 VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数 VFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数 VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算 HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数 HFPD(horizon

[国嵌攻略][155][I2C用户态驱动设计]

用户态驱动模型 用户态驱动模型首先是一个应用程序,其次是在这个用户程序中通过内核调用来驱动设备. IIC通用驱动代码 IIC通用驱动程序的代码在/drivers/i2c/i2c-dev.c中.一次读操作或者一次写操作就是一条消息. EEPROM用户态驱动 IIC通用设备对应/dev/i2c-0设备文件. 1.打开通用设备驱动 2.构造写数据到eeprom的消息 3.使用ioctl写入数据 4.构造从eeprom读数据的消息 5.使用ioctl读出数据 6.关闭设备 配置IIC驱动 make me

[国嵌攻略][147][简单块设备驱动设计]

头文件 #include <linux/blkdev.h> #include <linux/bio.h> blkdev.c /******************************************************************** *头文件 *********************************************************************/ #include <linux/init.h> #incl

[国嵌攻略][158][SPI裸机驱动设计]

SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会自动移动到发送FIFO中:同理,如果CPU要从接收FIFO中读取数据,就访问寄存器SPI_RX_DATA,紧接着接收FIFO的数据就会自动移动到SPI_RX_DATA寄存器中. OK6410 SPI裸机程序分析 //SPI初始化 u8 SPI_Init(){ //SPI复位 CH_CFG0 |= B

[国嵌攻略][156][I2C自编设备驱动设计]

AT24C08的驱动在Linux内核中已经提供,在/drivers/misc/eeprom/at24.c文件中.在对应的probe函数中有一个创建/sys/.../eeprom文件的函数,应用程序通过调用/sys/.../eeprom设备文件来对设备进行读写操作. 移植AT24C08驱动 1.修改内核注册eeprom设备 在kernel/linux-mini2440/arch/arm/mach-s3c2440.c中的machine_init下注册IIC设备. mach-mini2440.c st

[国嵌攻略][102][内核驱动开发环境搭建]

服务器环境搭建 1.配置tftp服务器 1.1.设置tftp目录 vim /etc/xinetd.d/tftp server_args             = -s .../tftp disable                 = no 1.2.启动tftp服务 /etc/init.d/xinetd restart 2.配置nfs服务器 2.1.设置nfs目录 vim /etc/exports .../nfs *(rw,sync,no_root_squash) 2.2.启动nfs服务 /

[国嵌攻略][067][tftp协议分析]

TFTP作用 用于网络下载,TFTP客户机在TFTP服务器中下载文件. TFTP交换过程 1.配置TFTP服务器 vim /etc/xinetd.d/tftp 2.交换过程 客户端发请求包到服务器 服务器发数据包到客户段 客户端发相应包到服务器 TFTP报文格式 操作码 1 请求报文 2 写入报文 3 数据报文 4 应答报文 5 出错报文

[国嵌攻略][070-095][Linux编程函数手册]

第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 <time.h> 1.1.5 返回值 成功:日历时间失败:-1 1.1.6 参数说明 t:不为空的情况下保存返回值   1.2 获取格林威治时间 1.2.1 函数名 gmtime 1.2.2 函数原形 struct tm *gmtime(const time_t *timep) 1.2.3 函数功