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

例子:服务器端开启一个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中一切都被看作文件,所以套接字也可以像操作文件一样去操作。

最新文章

  1. C++变量命名规则
  2. os.system和os.popen
  3. [java学习笔记]java语言基础概述之内存的划分&amp;堆和栈
  4. shell修改文件名(二)
  5. gentoo下grub文件编辑
  6. 应付发票审批 Hold and Release Names
  7. MVC4商城项目三:分部视图在导航条上的应用
  8. 201521123080《Java程序设计》第1周学习总结
  9. java海量大文件数据处理方式
  10. Typora + Mathpix Snip,相见恨晚的神器
  11. Java构造器的调用顺序
  12. javascript基础拾遗(二)
  13. Java虚拟机三 Java堆和栈
  14. hdu 3874(树状数组)题解
  15. 用PDMReader工具生成数据库设计文档(转载)
  16. Java7的新特性
  17. [MySQL-笔记]创建高性能索引
  18. CPU缓存刷新的误解
  19. C++实现二叉树的相应操作
  20. 转:Eclipse ADT的Custom debug keystore所需证书规格

热门文章

  1. mysql测试点
  2. vue动态生成组件
  3. CentOS7中JDK的安装和配置
  4. laravel 监听模型创建事件
  5. 喵星之旅-狂奔的兔子-redis使用
  6. xadmin 后台管理
  7. query_phase_execution_exception
  8. hive启动报错(整合spark)
  9. FastDFS文件上传和下载流程
  10. BinaryTree(二叉树) - 再谈二叉树