service端
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/shm.h>
#define MYPORT 8887
#define QUEUE 20
#define BUFFER_SIZE 1024
int main()
{
///定义sockfd
int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);
///定义sockaddr_in
struct sockaddr_in server_sockaddr;
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(MYPORT);
server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
///bind,成功返回0,出错返回-1
if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1)
{
perror("bind");
exit(1);
}
///listen,成功返回0,出错返回-1
if(listen(server_sockfd,QUEUE) == -1)
{
perror("listen");
exit(1);
}
///客户端套接字
char buffer[BUFFER_SIZE];
struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr);
///成功返回非负描述字,出错返回-1
int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length);
if(conn<0)
{
perror("connect");
exit(1);
}
while(1)
{
memset(buffer,0,sizeof(buffer));
int len = recv(conn, buffer, sizeof(buffer),0);
if(strcmp(buffer,"exit\n")==0)
break;
fputs(buffer, stdout);
send(conn, buffer, len, 0);
}
close(conn);
close(server_sockfd);
return 0;
}
client端
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/shm.h>
#define MYPORT 8887
#define BUFFER_SIZE 1024
int main()
{
///定义sockfd
int sock_cli = socket(AF_INET,SOCK_STREAM, 0);
///定义sockaddr_in
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(MYPORT); ///服务器端口
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); ///服务器ip
///连接服务器,成功返回0,错误返回-1
if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
{
perror("connect");
exit(1);
}
char sendbuf[BUFFER_SIZE];
char recvbuf[BUFFER_SIZE];
while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)
{
send(sock_cli, sendbuf, strlen(sendbuf),0); ///发送
if(strcmp(sendbuf,"exit\n")==0)
break;
recv(sock_cli, recvbuf, sizeof(recvbuf),0); ///接收
fputs(recvbuf, stdout);
memset(sendbuf, 0, sizeof(sendbuf));
memset(recvbuf, 0, sizeof(recvbuf));
}
close(sock_cli);
return 0;
}
测试:
分享到:
相关推荐
在C语言的学习中,Linux源码提供了丰富的实践案例。通过阅读和分析源码,我们可以了解到C语言在实现底层操作如内存管理、进程调度、中断处理等方面的应用。例如,`include/linux/sched.h`中的调度器头文件展示了如何...
网络编程方面,源码可能使用了socket API来处理TCP或UDP连接,接收客户端的请求并发送响应。加密算法则可能是AES、RSA等,用于保护数据的安全,防止未授权的访问和篡改。 在源码中,你可能会看到以下部分: 1. ...
综上所述,《Linux内核源码剖析:TCP IP实现》这本书深入探讨了Linux内核中TCP/IP协议栈的实现原理与技术细节,对于希望深入了解网络通信机制以及进行相关开发工作的读者来说具有很高的参考价值。通过对本书的学习,...
Linux程序设计源码是深入理解操作系统内核与应用程序交互的关键,它揭示了如何在Linux环境下构建、调试和优化软件。Linux作为一个开源操作系统,其源码为开发者提供了无尽的学习资源和创新机会。以下是对Linux程序...
这些源码模块展示了C语言在实际应用中的灵活性和实用性,它们可以作为学习C语言编程的实践案例,也可以直接应用于项目中,提高开发效率。理解和掌握这些知识点,对于提升C语言编程能力,尤其是系统级编程和图形界面...
通过对"Linux飞鸽传送源码"的学习,可以深入理解网络通信、多线程编程以及C语言在系统级应用中的实践,对于提升Linux系统编程能力大有裨益。同时,这个项目也提供了一个实际的案例,便于开发者在实践中学习和提升。
"飞鸽传书"是一个典型的C语言实现的类QQ程序,它利用了Linux下的socket接口进行网络通信,为学习者提供了宝贵的实践案例。 首先,我们来理解什么是socket。Socket,即套接字,是网络通信的基本单元,是不同计算机...
"Socket网络编程"是C语言在Unix/Linux平台上的强项。通过socket API,开发者可以创建客户端和服务器应用,实现TCP/IP或UDP协议的数据传输。例如,socket()函数用于创建套接字,bind()和listen()用于设置服务器端,...
总结来说,通过在Ubuntu Linux上编译安装飞鸽传书源码,不仅可以获得一个可用的即时通讯工具,还能亲身体验到Linux下的网络编程过程,这对于提升你的Linux技能和网络编程能力非常有帮助。在这个过程中,你将学习到...
一个简单的支持多个客户端链接的TCP/Socket...来自博客:c/c++开发,c++无可避免的TCP/Socket通信开发实战案例的初始源码 来自博客:c/c++开发,无可避免的代码重构实战(基于前文TCP/Socket通信开发案例)重构代码 ...
本资源“Linux+C编程实战源码”提供了一系列的实践案例,旨在帮助开发者深入理解Linux环境下的C语言编程。 首先,Linux是开源的操作系统,它的内核由C语言编写,因此对C语言的掌握是进行Linux开发的前提。C语言是...
以上案例覆盖了C++编程的多个方面,包括基本语法、数据结构、算法、文件操作、图形界面、网络编程、多线程、对象导向设计以及系统编程等。它们为学习者提供了丰富的实践机会,加深对C++的理解并提升编程能力。
这份"Linux环境下C编程指南源码"正是为了帮助初学者和经验丰富的程序员更好地理解和运用C语言在Linux系统上的编程技巧。源码通常包含了完整的示例程序,可以直接运行,这对于学习和调试来说非常方便,避免了手动录入...
《Linux协议栈源码分析与配套内核代码2.6.18》是一本深入解析Linux操作系统网络协议栈实现的专业书籍,它结合了配套的Linux内核源码版本2.6.18,为读者提供了从理论到实践的全面学习体验。这本书主要涵盖了以下几个...
在深入探讨基于Android操作系统的手机源码案例之前,我们首先需要理解Android系统的基本架构和工作原理。Android是一个开源的移动操作系统,它主要由Linux内核、运行时库、应用程序框架和应用程序四大部分组成。这个...
书中的源码会展示如何使用标准C库函数如`fopen`, `fread`, `fwrite`, `fclose`进行文件读写,以及更底层的`open`, `read`, `write`, `close`系统调用来实现文件操作。 2. **进程控制**:包括进程创建(`fork`)、...
2. 源代码:分为客户端和服务器端,使用C或C++语言编写,实现socket通信协议,包括连接建立、数据发送与接收、错误处理等。 3. 编译和运行指南:提供了在Linux环境或虚拟机中编译、运行程序的步骤,可能涉及到环境...
在本资源"易语言源码易语言linux多进程tcp服务器源码.rar"中,包含了一个使用易语言编写的适用于Linux系统的多进程TCP服务器的源代码。这个源代码库为学习和理解多进程网络编程提供了很好的实践案例。 首先,我们要...
综上,这个“聊天室 Linux C UDP”项目是一个实践性的教学案例,旨在教授网络编程的基本概念,特别是如何利用UDP协议在Linux环境中构建一个实时聊天应用。通过对源代码的学习和实际操作,开发者可以深入理解网络编程...
这个"linuxdown-1.0.0"压缩包中的源码提供了一个这样的实现,对于学习socket编程和多线程技术的初学者来说,是一个很好的实践案例。 首先,我们来了解一下Linux下的多线程编程。在Linux中,多线程是通过POSIX线程...