Linux Socket Programming In C++(1)

内容提要
1. 简介
2. CS 通信概览
3. 简单的CS实现
3.1 Server - 建立监听Socket
3.2 Client - 连接到服务器
3.3 Server - 接受客户端连接测试
3.4 Client 和 Server - 发送和接收数据
4 编译和测试我们的CS
4.1 文件列表
4.2 编译和测试
5. 结论
1. 简介
Socket 是进程之间交换数据的机制。这些进程即可以是同一台机器上的,也可以是通过网络连接起来的不同机器。一旦一个Socket连接建立,那么数据就能够双向传输,直到其中一端关闭连接。
由于我过去要在一个进行中的项目中使用Socket,所以我开发并提炼了几个C++类来封装原始Socket API调用。通常,请求数据的应用程序叫做客户端Client,而为请求服务叫做服务器Server。我创建了两个主要的类 ClientSocket ServerSocket,用他们,客户端和服务器端就可以交换数据了。
本文的目标就是教会你如何再你的程序中使用 ClientSocket ServerSocket。我们首先简要探讨一下cs通信,接着我们会编写一个简单且使用着两个类的serverclient
2. CS 通信概览
再开始讨论具体代码之前,我们应该简要看一下一个典型的CS连接。如下这张表格给出了这些步骤的大概情况:
Server
Client
1. 建立一个监听端口,等待来自客户端的连接


2. 创建一个客户端端口,并且尝试链接到服务器。
3. 接受客户端的连接请求。

4. 发送和接受数据。
4. 发送和接受数据。
5. 关闭连接
5. 关闭连接
基本上说,首先,服务器监听一个端口,并且等待来自客户端的连接。之后客户端创建一个,并且尝试连接服务器。接着,服务器接受了来自客户端的连接,并且开始交换数据。一旦所有的数据都已经通过socket连接传输完毕,那么任意一方都可以关闭连接了。
3. 简单的CS实现
现在我们开始讨论一下代码了。那么在接下来的章节里面,我们回逐步建立CS双边代码来执行所有再前文中提到的功能。我们回实现一些典型的功能,例如创建服务器端口监听用的socket,接着创建客户端连接服务器的socket等等。所有这些代码可以在simple_server_main.cpp simple_client_main.cpp 找到。
如果你仅仅想检验看看这些源码是否好用,那么请直接跳到这一节。它列出来项目中所用的所有的文件,并且讨论了如何编译和测试他们。
3.1 Server - 建立监听Socket
我们要坐的第一件事情就是要创建一个简单的服务器,用来监听来自客户端的请求。如下是用来建立一个服务器socket的代码:
列表1 : 创建 server socket ( 部分 simple_server_main.cpp 的代码)
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>

int main ( int argc, int argv[] )
{
try
    {
      //
创建 server socket
      ServerSocket server ( 30000 );


      //
其余的代码是接受连接,处理请求等等
    }
catch ( SocketException& e )
   {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

return 0;
}

这就是创建一个server socket所需的一切了。ServerSocket 类的构造函数调用了一个必须的socket API来设置监听socket。它隐藏了很多细节,所以对你来说,所有要做的就是创建一个类的实例开始监听本地端口。
注意 try/catch 语句块。ServerSocket ClientSocket 类使用了C++的异常处理。如果一个类方法因为某些原因调用失败,那么它就抛出SocketException 类型的异常,这个异常被定义再SocketException.h中。如果不处理这个异常,就是直接导致程序结束,所以最好处理一下。你可以通过调用SocketException description() 方法来获取错误信息。

你可能感兴趣的:(C++,linux,socket,职场,休闲)