声明:大部分代码来自这篇博客http://www.cnblogs.com/diligenceday/p/6241021.html, 感谢博主

思路:

思路很重要呦~~~

socket详细信息,思路:http://www.cnblogs.com/renfanzi/p/5713054.html

基础知识

一个简单的socket服务端和客户端

#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 <iostream>
#include <string>
#include <typeinfo> #define PORT 7000
#define QUEUE 20
int conn; using namespace std; int main() {
//实例化socket对象:
// AF_INET为地址簇,默认IPV4;
// SOCK_STREAM为类型,默认为tcp
// 0为协议,默认自动选择合适协议
int ss = socket(AF_INET, SOCK_STREAM, );
// 创建一个struct
struct sockaddr_in server_sockaddr;
//结构体加入参数:端口和地址
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(PORT);
server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
//bind()
if (bind(ss, (struct sockaddr *) &server_sockaddr, sizeof(server_sockaddr)) == -) {
perror("bind");
exit();
}
//listen()
if (listen(ss, QUEUE) == -) {
perror("listen");
exit();
} struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr); //accept()
//成功返回非负描述字,出错返回-1
conn = accept(ss, (struct sockaddr *) &client_addr, &length); if (conn < ) {
perror("connect");
exit();
} char buffer[];
while () {
memset(buffer, , sizeof(buffer)); //read()
int len = recv(conn, buffer, sizeof(buffer), );
if (strcmp(buffer, "exit\n") == ) break;
printf("buffer: %s", buffer);
//send()
//必须要有返回数据, 这样才算一个完整的请求
send(conn, buffer, len, );
}
close(conn);
close(ss);
return ;
}

simple server

#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 7000
#define BUFFER_SIZE 1024 int main() {
///定义sockfd
int sock_cli = socket(AF_INET, SOCK_STREAM, ); ///定义sockaddr_in
struct sockaddr_in servaddr;
memset(&servaddr, , 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)) < ) {
perror("connect");
exit();
} char sendbuf[BUFFER_SIZE];
char recvbuf[BUFFER_SIZE];
while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL) {
send(sock_cli, sendbuf, strlen(sendbuf), ); ///发送
if (strcmp(sendbuf, "exit\n") == )
break;
recv(sock_cli, recvbuf, sizeof(recvbuf), ); ///接收
fputs(recvbuf, stdout); memset(sendbuf, , sizeof(sendbuf));
memset(recvbuf, , sizeof(recvbuf));
} close(sock_cli);
return ;
}

simple client

还没写完呢,下一步,1对多,多线程,异步,开源库,框架,等等...

c++ linux socket编程 c++网络编程的更多相关文章

  1. Linux下高并发网络编程

      Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...

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

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

  3. 如何使用socket进行java网络编程(二)

    通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...

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

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

  5. 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分

    老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分   老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...

  6. Linux IO模型和网络编程模型

    术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件 ...

  7. linux服务端的网络编程

    常见的Linux服务端的开发模型有多进程.多线程和IO复用,即select.poll和epoll三种方式,其中现在广泛使用的IO模型主要epoll,关于该模型的性能相较于select和poll要好不少 ...

  8. linux服务器开发三(网络编程)

    网络基础 协议的概念 什么是协议 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲传输文件.规定: 第一次,传输文件名,接收方接收到文件名 ...

  9. UNIX网络编程——揭开网络编程常见API的面纱【下】

    Linux网络编程数据收发的API流程分析        只要把数据在协议栈中的流动线路和脉络弄清楚了,关于协议栈的实现部分,理解起来就轻松多了.在网络编程章节的数据接收过程中,我们主要介绍过read ...

  10. UNIX网络编程——揭开网络编程常见API的面纱【上】

    Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作. 1.socket(famil ...

随机推荐

  1. 潭州课堂25班:Ph201805201 WEB 之 页面编写 第三课 (课堂笔记)

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  2. 在eclipse总是会运行之前的错误项目

    我改了context root没有用,删了work下面的项目文件也没有用,最后必须要改server的配置,就是在windows下有个server runtimeEnvironment http://b ...

  3. The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files

    我的方法:是缺少servlet的引用库,解决如下 1.工程右键-properties->java build path 2.在java build path的libraries tab页中选择A ...

  4. php null

    null 表示一个变量没有值,并且不区分大小写 在下列情况下一个变量被认为是 NULL: 1.被赋值为 NULL. 2.尚未被赋值. 3.被 unset(). 判断是否为null :  is_null ...

  5. C# 不同类型对象同名属性赋值

    /// <summary> /// 不同类型对象同名属性赋值 /// </summary> /// <typeparam name="S">源类 ...

  6. AFN和GCD并行同步问题

    链接: GCD 中组队列group与Afnetworking的结合使用 使用AFNetworking3.0实现接口异步并发 从并发编程到GCD浅述之一----任务.队列.线程复用.AFN3.0同步请求 ...

  7. Voltage Level-Shifter Output Waveform

    http://www.cypress.com/knowledge-base-article/interfacing-sram-jtag-signals-using-voltage-level-shif ...

  8. Scala:Functional Objects

    先上代码 class FunctionalObjects(var _x: Int, var _y: Int) { require(_x > 0) require(_y > 0) def t ...

  9. Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

  10. 解剖SQLSERVER 第一篇 数据库恢复软件商的黑幕(有删减版)

    解剖SQLSERVER 第一篇  数据库恢复软件商的黑幕(有删减版) 这一系列,我们一起来解剖SQLSERVER 在系列的第一篇文章里本人可能会得罪某些人,但是作为一位SQLSERVER MVP,在我 ...