Linux 网络编程(TCP)
- 客户端代码
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<sys/socket.h>
- #include<sys/types.h>
- #include<unistd.h>
- #include<netinet/in.h>
- #include <errno.h>
- int main(int argc, char** argv){
- int socketfd = ;
- char sendbuf[];
- char recvbuf[];
- struct sockaddr_in server_addr;
- int port = ;
- int nbytes;
- if((socketfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == ){
- fprintf(stderr, "socket Error:%s\n\a", strerror(errno));
- exit();
- }
- bzero(&server_addr, sizeof(struct sockaddr_in));
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(port);
- server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
- if((connect(socketfd, &server_addr, sizeof(server_addr))) == -){
- fprintf(stderr, "connect Error:%s\n\a", strerror(errno));
- exit();
- }
- while(){
- nbytes = recv(socketfd, recvbuf, sizeof(recvbuf), );
- recvbuf[nbytes] = '\0';
- printf("recv data is:%s\n",recvbuf);
- printf("Input:");
- scanf("%s", sendbuf);
- send(socketfd, sendbuf, sizeof(sendbuf), MSG_NOSIGNAL);
- }
- close(socketfd);
- exit();
- }
- 服务器端代码
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<sys/socket.h>
- #include<sys/types.h>
- #include<unistd.h>
- #include<netinet/in.h>
- #include <signal.h>
- #include <errno.h>
- int main(int argc, char** argv){
- int old_fd,new_fd;
- struct sockaddr_in server_addr;
- struct sockaddr_in client_addr;
- char recvbuf[];
- int port = ;
- int len,nbytes;
- if((old_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == ){
- fprintf(stderr, "socket Error:%s\n\a", strerror(errno));
- exit();
- }
- bzero(&server_addr, sizeof(struct sockaddr_in));
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(port);
- server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- if((bind(old_fd, &server_addr, sizeof(server_addr))) == -){
- fprintf(stderr, "bind Error:%s\n\a", strerror(errno));
- exit();
- }
- //listen的第二个参数backlog为内核缓存队列长度,该队列针对每个监听套接字包含两个队列:
- //一是未完成三次握手的,二是完成三次握手的
- if(listen(old_fd, ) == -){
- fprintf(stderr, "listen Error:%s\n\a", strerror(errno));
- exit();
- }
- while(){
- len = sizeof(struct sockaddr_in);
- if ((new_fd = accept(old_fd,
- (struct sockaddr *)&client_addr,
- &len)) == -) {
- fprintf(stderr, "Accept error:%s\n\a", strerror(errno));
- exit();
- }
- while(){
- if (send(new_fd, "hello fredric", strlen("hello fredric"), MSG_NOSIGNAL) == -) {
- fprintf(stderr, "send error:%s\n", strerror(errno));
- exit();
- }
- nbytes = recv(new_fd, recvbuf, sizeof(recvbuf), );
- recvbuf[nbytes] = '\0';
- printf("recv data is:%s\n",recvbuf);
- }
- close(new_fd);
- }
- close(old_fd);
- exit();
- }
Linux 网络编程(TCP)的更多相关文章
- Linux网络编程——tcp并发服务器(poll实现)
想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程——I/O复用之poll函数> 代码: #include <string.h> #include <st ...
- Linux 网络编程——TCP
环境:Linux C 一.协议介绍 TCP是面向连接的协议,提供可靠的数据传输:TCP协议的可靠传输基于三次握手.四次挥手以及确认重传机制实现.下面来具体展示下TCP的三次握手.四次挥 ...
- Linux网络编程-tcp缓存设置
最近发现服务的逻辑完成时间很短,但是上游接收到的时间比较长,所以就怀疑是底层数据的序列化/反序列化.读写.传输有问题,然后怀疑是TCP的读写缓存是不是设置太小.现在就记录下TCP缓存的各配置项以及缓存 ...
- linux网络编程tcp
之前学习的时候笔记没有保存好,这次重新编写一个案例. 客户端实现程序代码: #include <string.h> #include <stdlib.h> #include & ...
- Linux网络编程学习路线
转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程 1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...
- 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
[Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...
- TCP/UDP Linux网络编程详解
本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...
- 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"
[深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...
- 【linux草鞋应用编程系列】_5_ Linux网络编程
一.网络通信简介 第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章. 二.linux网络通信 在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...
- Linux 网络编程(IO模型)
针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...
随机推荐
- Oracle 服务器端执行带参数的procedure
进入服务器后 su - oracle sqlplus schema/schemapass 连接上以后,输入以下,然后执行 declare vRet number(5) := 8; begin proc ...
- vim深入研究
About VIM--Unix及类Unix系统文本编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇 ...
- 云存储的那些事(2)——数据分布算法CRUSH
在分布式系统中,数据最终还是要存储到物理设备上的,ceph的底层设备抽象角色是OSD,那么数据是如何被决定放在哪块OSD上的,答案就是CRUSH算法. 关键字:CRUSH.一致性hash.ceph数据 ...
- Maemo平台上如何使用Openvpn
Maemo是一个开源的智能手机软件平台社区,它是基于Debia的LInux发行版本,Maemo的大多是开源的,并已经制定了Maemo和诺基亚内部的设备与许多开源项目,例如,Debian的Linux内核 ...
- Maven中配置默认JDK版本
使用Maven构建项目时,默认是使用jdk1.3版本,目前很多使用泛型的项目肯定是无法通过编译,除了修改项目的pom文件外,还可以在Maven的配置文件settings.xml中添加如下配置来解决: ...
- discuz MVC结构分析
Discuz软件经解压后产生的三个文件夹中的一个叫upload的成为网站的根目录.里面的内容可以在某些网站上在线阅读,如用好库编程网.也可以离线在本地阅读,如用VS.Php for Visual St ...
- Java正则表达式的解释说明
1.字符x 字符 x.例如a表示字符a\\ 反斜线字符.在书写时要写为\\\\.(注意:因为java在第一次解析时,把\\\\解析成正则表达式\\,在第二次解析时再解析为\,所以凡是不是1 ...
- SSE and Websocket
http://www.w3school.com.cn/html5/html_5_serversentevents.asp http://javascript.ruanyifeng.com/htmlap ...
- 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项
------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...
- 【开发环境】JAVA 环境变量批处理
@echo off set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environmen ...