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

例子:服务器端开启一个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. 在linux环境下python与C++混合编程

    参考:在linux环境下编译C++ 程序 linux下python3调用c代码或者python3调用c++代码 https://blog.csdn.net/u013179327/article/det ...

  2. Yii2.0 连接数据库

    打开数据库配置文件common\config\main-local.php

  3. Java面向对象封装优化1_this(Python中的self)

    1. 类 package cn.itcast.day06.demo03; /* 问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来. 解决方案:用private关键字将需要保护的成员变 ...

  4. 微信小程序开发豆瓣电影接口失效

    豆瓣旧API接口停用,使用以下接口代替 .获取正在热映的电影:https://douban.uieee.com/v2/movie/in_theaters访问参数:start : 数据的开始项 coun ...

  5. MySQL忘记密码(终极解决方法,亲测有效,windows版本)

    1.进入mysql的bin目录 2.net stop mysql 3.mysqld --skip-grant-tables 输入 mysqld --skip-grant-tables 回车. (--s ...

  6. Plastic Sprayers Manufacturer - Ingenious Design Of Spray Plastic Bottle

    Plastic bottles are now an indispensable container in life. Plastic bottles will appear in all aspec ...

  7. 23 JavaScript规范与最佳实践&性能&箭头函数

    大多数web服务器(Apache等)对大小写敏感,因此命名注意大小写 不要声明字符串.数字和布尔值,始终把他们看做原始值而非对象,如果把这些声明为对象,会拖慢执行速度 对象是无法比较的,原始值可以 不 ...

  8. leetcode 0208

    目录 ✅ 108. 将有序数组转换为二叉搜索树 描述 解答 py [tdo rev 0208]py知识:if not x: 和if x is not None:和if not x is None:使用 ...

  9. Educational Codeforces Round 79 (Rated for Div. 2) - D. Santa's Bot(数论)

    题意:有$n$个孩子,第$i$个孩子有$k[i]$件想要的礼物,第$j$个礼物为$a[i][j]$,现在随机挑一个孩子,从他想要的礼物里面随机挑一个,然后送给另一个孩子$($这个孩子可以和第一个孩子是 ...

  10. Update(Stage4):sparksql:第5节 SparkSQL_出租车利用率分析案例

    目录: 1. 业务2. 流程分析3. 数据读取5. 数据清洗6. 行政区信息 6.1. 需求介绍 6.2. 工具介绍 6.3. 具体实现7. 会话统计 导读 本项目是 SparkSQL 阶段的练习项目 ...