网络编程就是编写程序使两台联网的计算机相互交换数据。

例子:服务器端开启一个socket,监听9999端口。客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello world";

服务器端:

  step1:调用socket函数创建套接字。

  step2:调用bind函数分配ip和端口号。

  step3:调用listen函数转为可接受请求状态。

  step4:调用accept函数受理连接请求。

 #include <unistd.h>
#include <iostream>
#include <string>
#include <cstdlib>
#include <arpa/inet.h>
#include <sys/socket.h> using namespace std; int main()
{
int serv_sock = socket(PF_INET, SOCK_STREAM, );
if (serv_sock == -) {
cout << "socket() error" << endl;
return ;
} sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(); if (bind(serv_sock, (sockaddr*) &serv_addr, sizeof(serv_addr)) == -) {
cout << "bind() error" << endl;
close(serv_sock);
return ;
} if (listen(serv_sock, ) == -) {
cout << "listen() error" << endl;
close(serv_sock);
return ;
} sockaddr_in clnt_addr;
socklen_t clnt_add_size = sizeof(clnt_addr);
cout << "start listen" << endl;
int clnt_sock = accept(serv_sock, (sockaddr*) &clnt_addr, &clnt_add_size);
if (clnt_sock == -) {
cout << "accept() error" << endl;
close(clnt_sock);
close(serv_sock);
return ;
} string message = "hello world";
write(clnt_sock, message.c_str(), message.size()); close(clnt_sock);
close(serv_sock); return ;
}

客户端:

  step1:调用socket函数创建套接字。

  step2:调用connect函数想服务器端发送连接请求。

 #include <unistd.h>
#include <iostream>
#include <string>
#include <cstdlib>
#include <arpa/inet.h>
#include <sys/socket.h> using namespace std; int main()
{
int clnt_sock = socket(PF_INET, SOCK_STREAM, );
if (clnt_sock == -) {
cout << "socket() error" << endl;
return ;
} sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(); if (connect(clnt_sock, (sockaddr*) &serv_addr, sizeof(serv_addr)) == -) {
cout << "connect() error" << endl;
close(clnt_sock);
return ;
} char message[];
int str_len = read(clnt_sock, message, sizeof(message)-);
if (str_len == -) {
cout << "read failed" << endl;
close(clnt_sock);
return ;
} cout << message << endl;
close(clnt_sock);
return ;
}

  示例中用到了write和read函数,linux中一切都被看作文件,所以套接字也可以像操作文件一样去操作。

C/C++网络编程1——linux下实现的更多相关文章

  1. (50)LINUX应用编程和网络编程之五 Linux信号(进程间通信)

                                                                                 信号实现进程间的通信 3.5.1.什么是信号 ...

  2. (49)LINUX应用编程和网络编程之四 Linux进程全解

    补充: 1.  C程序的执行过程: C编译器调用链接器,链接器设置可执行程序文件的启动起始地址(启动例程),启动例程获得内核传递来的 命令行参数和环境变量值,为调用main函数做准备.[实际上该启动例 ...

  3. (46)LINUX应用编程和网络编程之一Linux应用编程框架

    3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...

  4. C语言网络编程(Linux && Windows)(1)

    和朋友一起做课程设计,同时学习C语言的网络编程,以前写的都是python网络编程,但python很多的库都是封装好的,大部分人在使用的时候不会去了解底层的实现,这样对长远的学习不太好,也改正自己这方面 ...

  5. 监控io性能、free、ps命令、查看网络状态、Linux下抓包 使用介绍

    第7周第2次课(5月8日) 课程内容: 10.6 监控io性能 10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://ww ...

  6. (52)LINUX应用编程和网络编程之七Linux线程

    3.7.1.再论进程 3.7.1.1.多进程实现同时读取键盘和鼠标 3.7.1.2.使用进程技术的优势 (1)CPU时分复用,单核心CPU可以实现宏观上的并行.微观上的串行 (2)实现多任务系统需求( ...

  7. Python网络编程:Linux epoll

    原文地址:http://scotdoyle.com/python-epoll-howto.html 介绍 Python已于2.6版本添加访问Linux epoll库的API.这篇教程使用Python ...

  8. Linux centos7日常运维——监控io性能、free内存命令、ps进程命令、查看网络状态、linux下抓包

    一.监控io性能 Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. iostat ...

  9. (51)LINUX应用编程和网络编程之六Linux高级IO

    3.6.1.非阻塞IO 3.6.1.1.阻塞与非阻塞 阻塞:阻塞具有很多优势(是linux系统的默认设置),单路IO的时候使用阻塞式IO没有降低CPU的性能 补充:阻塞/非阻塞, 它们是程序在等待消息 ...

随机推荐

  1. PHP转换oracle数据库的date类型

    今天圣诞节啊,圣诞节快乐啊! 最近遇到一个很纠结的事,就是我在plsql里面查的是这样的,很正常, 但是我用程序查出来就是这样的,啊啊啊,真是崩溃啊 但是我传数据需要上面那种格式,而且我对oracle ...

  2. java中路径的问题

    在java中,涉及路径的问题有很多,不管在windows还是linux系统中,不要纠结”/“分隔符的使用,在windows系统中,资源加载器会自动的将”/“转换成”\“. 在java中获取资源的方式有 ...

  3. JenKins docker 集群

    //tag 桉树有时间来搞 **阿斯蒂 啊 阿斯蒂

  4. 什么是DO / DTO / BO / VO /AO ?

    转载:https://blog.csdn.net/ouzhuangzhuang/article/details/86644476 POJO 是 DO / DTO / BO / VO 的统称. DO(D ...

  5. C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和

    程序分析:抓住分子与分母的变化规律:分子a:1,2,3,5,8,13,21,34,55,89,144...分母b:2,3,5,8,13,21,34,55,89,144,233...分母b把数赋给了分子 ...

  6. 将.NET Core Web Api发布到Linux(CentOS 7 64)

    将.NET Core(2.1) Web Api发布到Linux(CentOS 7 64) 近来在学习linux相关的一些东西,然后正巧想试一下把core的应用程序发布到Linux,毕竟跨平台.尝试一下 ...

  7. 行内元素的上下margin 和 img元素的上下margin

    行内元素的特点有: 1.与其他元素在同一行 2.宽度(width).高度(height).内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bott ...

  8. vscode 提示 Running save participants 无法保存文件

    今天vscode提示一直在running save participants...中,无法保存文件 control + shift + p打开面板后,输入Reload with extensions ...

  9. 压力测试-apachebench

    压力测试-apachebench 1.      压力测试 压力测试的概念\定义: 性能测试Performance Test :是指通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项 ...

  10. ANSYS布尔运算APDL

    目录 1.交运算 2.加运算 3.减运算 4.分割 5. 搭接 6. 互分 6.粘结 1.交运算 交运算的结果是由每个初始图元的共同部分,形成一个新的图元. 命令 功能 备注 LINL 线与线的交 A ...