http://www.cnblogs.com/-Lei/archive/2012/09/04/2670964.html

上一篇写了对套接字操作的封装,这一节使用已封装好的Socket类实现服务器与客户端的通信(Socket的定义见上篇Socket.h)

服务器端:

ServerSocket.h
#ifndef SERVERSOCKET_H
#define SERVERSOCKET_H#include "Socket.h"class ServerSocket:public Socket
{public:ServerSocket(const int port);ServerSocket();virtual ~ServerSocket();void Accept(Socket& socket);
};#endif

ServerSocket.cpp
#include "ServerSocket.h"
#include "SocketException.h"ServerSocket::ServerSocket(const int port)
{if ( ! Socket::Create() ){throw SocketException ( "Could not create server socket." );}if ( ! Socket::Bind ( port ) ){throw SocketException ( "Could not bind to port." );}if ( ! Socket::Listen() ){throw SocketException ( "Could not listen to socket." );}
}ServerSocket::~ServerSocket()
{
}void ServerSocket::Accept(Socket& socket)
{if ( ! Socket::Accept ( socket ) ){throw SocketException ( "Could not accept socket." );}
}

//============================================================================
// Name        : ChatServer.cpp
// Author      : Lei
// Version     :
// Copyright   :
// Description : ChatServer in C++, Ansi-style
//============================================================================

#include <iostream>
#include <string>
#include "ServerSocket.h"
#include "SocketException.h"
using namespace std;int main()
{cout<<"Running server..."<<endl;try{ServerSocket server(8080);while(true){Socket newSocket;server.Accept(newSocket);try{string message;server.Receive(newSocket,message);cout<<"Receive message: "<<message<<endl;message="Here is server";server.Send(newSocket,message);}catch(SocketException&){}}}catch(SocketException& ex){cout << "Exception was caught:" << ex.Description() << "\nExiting.\n";}return 0;
}

接下来是客户端:

ClientSocket.h
#ifndef CLIENTSOCKET_H
#define CLIENTSOCKET_H#include "Socket.h"
#include <string>class ClientSocket:public Socket
{public:ClientSocket (const std::string& host,const int port );virtual ~ClientSocket();bool Send(const std::string& message) ;int Receive(std::string& message) ;
};#endif

ClientSocket.cpp
#include "ClientSocket.h"
#include "SocketException.h"ClientSocket::ClientSocket(const std::string& host,const int port)
{if(!Socket::Create())throw SocketException("Could not create client socket.");if(!Socket::Connect(host,port))throw SocketException( "Could not connect to port." );
}ClientSocket::~ClientSocket()
{}bool ClientSocket::Send(const std::string& message)
{return Socket::Send(static_cast<Socket&>(*this),message);
}int ClientSocket::Receive(std::string& message)
{return Socket::Receive(static_cast<Socket&>(*this),message);
}

这里使用了 dynamic_cast来将this指针向下转型,转成指向基类Socket的指针

//============================================================================
// Name        : ChatClient.cpp
// Author      : Lei
// Version     :
// Copyright   :
// Description : ChatClient in C++, Ansi-style
//============================================================================

#include <iostream>
#include <string>
#include "ClientSocket.h"
#include "SocketException.h"
using namespace std;int main()
{cout<<"Running client...."<<endl;try{ClientSocket clientSocket("127.0.0.1",8080);clientSocket.Send("Hello,here is client");string message;clientSocket.Receive(message);cout<<"Response from server: "<<message<<endl;}catch(SocketException& ex){cout << "Exception was caught:" << ex.Description() << "\n";}return 0;
}

结果:

服务器端

客户端

Linux socket编程(二) 服务器与客户端的通信相关推荐

  1. SOCKET编程-时间服务器和客户端的实现

    文章目录 UNIX_NET 获取服务器时间 connect函数 获取时间客户端程序实现 获取时间服务器实现 小技巧 宏定义的使用&&变参函数的宏定义实现 源码地址 UNIX_NET 获 ...

  2. linux socket编程web服务器实现报文解析,[Socket][网络编程]程序范例:Linux下连接WEB服务器...

    昨天试着在Ubuntu 下用C语言写了一个客户端,用来向WEB服务器上交请求并取回响应报文. 同时,这也是一个通用的基于IPv4的客户端程序例程. [cpp] /* socket test on li ...

  3. linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室

    #include//打开文件 int fd; //客户端socket int client_sock; //文件路径 char path[100]; //段口号 char port[100]; //发 ...

  4. 【Linux】socket网络编程之服务器与客户端的数据交互

    [Linux]socket网络编程之服务器与客户端的数据交互 前言参考 argc !=2是什么意思 inet pton函数 对stdin,stdout 和STDOUT_FILENO,STDIN_FIL ...

  5. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

  6. 服务器没有响应客户端,socket编程某些服务器对某些客户端没有响应的问题!!...

    socket编程某些服务器对某些客户端没有响应的问题!! 我是这么用的t=serversocket(inetaddress,2); while(true){ t=y.accept(); out=new ...

  7. Linux Socket编程

    IP socket 是在其上建立高级Internet 协议的最低级的层:从HTTP到SSL到POP3到Kerberos再到UDP-Time,每种Internet协议都建立在它的基础上.为了实现自定义的 ...

  8. linux下sig_pipe函数,linux socket编程 出现信号SIGPIPE,分析及解决

    在编写一个仿QQ软件,C/S模式.出现的问题:当客户机关闭时,服务器也随着关闭,纠结很久之后,我gdb了下,出现下面提示信息: Program received signal SIGPIPE, Bro ...

  9. Windows Socket和Linux Socket编程的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2. ...

最新文章

  1. 运维工程师的职责和前景
  2. 并发 线程交替执行_并发与并行的区别
  3. Java记录 -1- 基础JDK
  4. 白炽灯可控硅调光程序
  5. mysql主主备份_MySQL主从备份和主主备份配置+Keepalived+MySQL读写分离
  6. BioPython-1
  7. 很多人理解互联网是“年轻化”
  8. PowerDesigner在生成SQL时报错Generation aborted due to errors detected during the verification of the mod
  9. mybatis---知识点复习
  10. libcmtd.lib(wincrt0.obj) : error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 __tmainCRTStartup 中被引用
  11. 给物体赋值 只改变transform.position的某一维,访问另一个脚本的变量以及给物体用脚本动态添加属性
  12. python小白使用pycharm新建项目,import什么内置包都报错
  13. 微信iOS端无法执行jquery on()方法
  14. 从苦寻ADSL拨号王想到的 -- 需到用时方恨知道的少啊
  15. 在线流程图和思维导图开发技术详解(五)
  16. 基于Master-DistributedMaster-Slave架构的replication
  17. NUCLEO-L432KC实现GPIO控制(STM32L432KC)
  18. AT8637S(PHS/EN输入接口单通道0.8A低压H桥IC)
  19. 游戏装备mysql表设计_Game游戏数据库人物表,装备表,技能表
  20. java 角色管理代码_后台管理系统-角色管理模块

热门文章

  1. Django集合Ueditor
  2. mysql联合索引与Where子句优化浅析
  3. cocos2dx 3.x 蒙板 遮罩 点击圆功能
  4. HDU 5652 India and China Origins(二分 + BFS)
  5. 夺命雷公狗---ECSHOP---08---商品页的拇改成星星
  6. CAlayer层的属性
  7. 20135127陶俊杰 实验一
  8. .NET系统架构改造的经验和教训
  9. idhttp.post方式 调用datasnap rest 远程方法
  10. BSTR、char* 和 CString 之间的转换 (转)