zui

最近浅浅的学习了一下网络编程,所以写这个文章。一方面起到对自己督促作用,另一方面也算是笔记吧!但是在开始前,你的系统需要是linux!

那作为网络编程,自然是需要服务端和客户端。下面的代码会创建一个SOCKET并且在客户端可以向服务端发送消息。

服务端:

#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <string.h>
#include <netdb.h>
#include <stdlib.h>
#include <string>
#define Message "Message"
using namespace std;
string str;
int cnt = 0;
int main(int argc,char* argv[]){int listenfd = 0;listenfd = socket(AF_INET,SOCK_STREAM,0);sockaddr_in SeverAddress;memset(&SeverAddress,0,sizeof(sockaddr_in));SeverAddress.sin_family = AF_INET;SeverAddress.sin_port = htons(atoi("5005"));SeverAddress.sin_addr.s_addr = htonl(INADDR_ANY);//指定任意IP//SeverAddress.sin_addr.s_addr = inet_addr("IP地址");//指定IPbind(listenfd,(sockaddr*) &SeverAddress,sizeof(SeverAddress));listen(listenfd,5);int clientfd = 0;sockaddr_in clientAddress;memset(&clientAddress,0,sizeof(sockaddr_in));int socklen = sizeof(sockaddr_in);clientfd = accept(listenfd,(sockaddr*) &clientAddress,(socklen_t*) &socklen);clog<<"from:"<<inet_ntoa(clientAddress.sin_addr)<<endl;char butter[1024];memset(butter,0,sizeof(butter));while(str != "break"){recv(clientfd,butter,sizeof(butter),0);str = butter;memset(butter,0,sizeof(butter));clog<<cnt<<' '<<Message<<">>>"<<str<<endl;cnt++;}close(clientfd);close(listenfd);return 0;
}

客户端:

#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <string.h>
#include <netdb.h>
#include <stdlib.h>
#include <string>
using namespace std;
string str;
int main(int argc,char* argv[]){int sockfd = 0;sockfd = socket(AF_INET,SOCK_STREAM,0);hostent* home;home = gethostbyname(argv[1]);//获取服务端的IP地址sockaddr_in Address;memset(&Address,0,sizeof(sockaddr_in));Address.sin_port = htons(atoi(argv[2]));//指定端口Address.sin_family = AF_INET;//制定协议memcpy(&Address.sin_addr,home->h_addr,home->h_length);connect(sockfd,(sockaddr*) &Address,sizeof(Address));/连接服务器char butter[1024];memset(butter,0,sizeof(butter));bool iret = true;while(iret != false){clog<<"input Message>>>";cin>>butter;iret = send(sockfd,butter,sizeof(butter),0);//接受信息str = butter;memset(butter,0,sizeof(butter));}close(sockfd);//关闭socketreturn 0;
}

效果如下:

[lemon@fedora src]$ ./main
from:192.168.0.113
0 Message>>>Lemon
1 Message>>>Hello
2 Message>>>你好
3 Message>>>break
#服务端的结果
[lemon@fedora test]$ ./clienfd IP地址 5005
input Message>>>Lemon
input Message>>>Hello
input Message>>>你好
input Message>>>break
input Message>>>break
input Message>>>break
#客户端的操作,就是不知道为什么break要输入三遍

不知道大家看到是怎样的,反正我刚开始觉得很乱。但是梳理一下会号很多。

 int socket(int domain, int type, int protocol);

首先是socket函数,目的是创建一个用于通讯的通道。参数一般就是AF_INET、SOCK_ST REAM 、0。返回的是一个文件描述符,反正我是不明白,大家可以去搜索一下

Servaddr.sin_addr.s_addr = htonl(INADDR_ANY) //任意IP地址
Servaddr.sin_addr.s_addr = inet_addr("指定IP地址");

这个很好理解,就是为服务器指定地址,就好比在网络中房子的地址。那有了房子,客人要访问就必须要知道你的门牌号(端口)

SeverAddress.sin_port = htons(atoi(端口));

最后这个没什么好说的,就是选择协议,默认如下就好

SeverAddress.sin_family = AF_INET;
//其他的函数可以使用man查看,因为他们的参数比较好理解(主要是我比较懒)
//可以改变参数运行,查看程序的结果
//总之,希望这篇文章能对你有所帮助!

C/C++的网络编程基础(SOCKET)相关推荐

  1. Linux C编程之十六 网络编程基础-socket

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

  2. 网络编程基础socket 重要中:TCP/UDP/七层协议

    计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间"一对所有"的通讯模式,网络对其中每一台主 ...

  3. python实现udp聊天室_python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序...

    socket介绍: socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工. socket应用: 不夸张来说,只要跟网络 ...

  4. Linux 网络编程基础-socket

    标题文章目录 Linux 网络基础 分层模型结构: C/S 模型:client-server B/S模型:browser-server 以太网帧和ARP协议 IP 协议 UDP 协议 TCP 协议 网 ...

  5. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程

    标签:status   传递   windows   返回   修改   队列   _for   响应   关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...

  6. Linux学习之----socket网络编程基础

    分层模型 OSI七层模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后再转 ...

  7. Python网络编程基础之ip地址,端口号,TCP,socket

    Python网络编程基础 IP地址 ip地址表现形式 查看ip地址 Linux Windows 检查网络是否正常 端口与端口号 端口号分类 知名端口号 动态端口号 TCP协议 概念 TCP通讯步骤 特 ...

  8. 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)

    C++ Socket网络编程基础详解(TCP版) ​    网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...

  9. 计算机网络(二) | 网络编程基础、Socket套接字、UDP和TCP套接字编程

    目录 一.网络编程基础 1.1 为什么需要网络编程 1.2 什么是网络编程 1.3 网络编程中的基本概念 二.Socket套接字 2.1 概念 2.2 分类 2.3 Java数据报套接字通信模型 2. ...

最新文章

  1. Wecoach陈隽永:如何打造一款完美的智能硬件App?
  2. Python-线程的生命周期
  3. pdf去除水印方法!【亲测可用】
  4. OpenCV各向异性图像分割anisotropic image segmentation的实例(附完整代码)
  5. 重构的小故事 Change Value to Reference or Vice Verse
  6. C++类成员的访问权限以及类的封装
  7. 串口发送和接受字符串,AD转换多通道读取
  8. 纽芬兰纪念大学计算机系怎么样,纽芬兰纪念大学计算机
  9. 简单的编程用c语言,终于学会了用c语言实现简单的面相对象的编程方法了
  10. 康威定律-软件之道:软件开发争议问题剖析
  11. 战舰少女服务器不显示,战舰少女进不去 闪退及连接不上解决方法
  12. lsd 特征点匹配代码_openCV-特征点匹配算法介绍一:理解特征
  13. ClientHeight
  14. HC-05与JDY-09蓝牙模块对比与使用
  15. 科学计算机怎么解一元一次方程,解一元一次方程“八不要”
  16. IDEA中DEBUG时断点变成灰色
  17. 动态规划最好的讲解之一 | 算法干货
  18. 统计学生平均成绩与及格人数(PTA)
  19. 看见·先行者 | 织音App率先接入即构在线KTV实时合唱解决方案
  20. DevOps工具链及基于k8s的DevOps环境搭建

热门文章

  1. 剑指offer面试题14-I:剪绳子
  2. React应用框架DvaJs入门
  3. 键盘事件keydown()与keyup()
  4. 详解使用Ghost安装Win7系统步骤
  5. python快速排序,从小到大
  6. VirtualBox导入ova文件报错E_INVALIDARG (0x80070057)
  7. categorical_crossentropy和sparse_categorical_crossentropy的区别
  8. OpenWrt 学习笔记【6】配置USB驱动
  9. 计算机xp考试经验,全国专业技术人员计算机应用能力考试标准教程——Windows XP操作系统...
  10. 基于SSM+VUE的题库刷题考试系统(附源码获取+论文)