Linux socket编程(二) 服务器与客户端的通信
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编程(二) 服务器与客户端的通信相关推荐
- SOCKET编程-时间服务器和客户端的实现
文章目录 UNIX_NET 获取服务器时间 connect函数 获取时间客户端程序实现 获取时间服务器实现 小技巧 宏定义的使用&&变参函数的宏定义实现 源码地址 UNIX_NET 获 ...
- linux socket编程web服务器实现报文解析,[Socket][网络编程]程序范例:Linux下连接WEB服务器...
昨天试着在Ubuntu 下用C语言写了一个客户端,用来向WEB服务器上交请求并取回响应报文. 同时,这也是一个通用的基于IPv4的客户端程序例程. [cpp] /* socket test on li ...
- linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室
#include//打开文件 int fd; //客户端socket int client_sock; //文件路径 char path[100]; //段口号 char port[100]; //发 ...
- 【Linux】socket网络编程之服务器与客户端的数据交互
[Linux]socket网络编程之服务器与客户端的数据交互 前言参考 argc !=2是什么意思 inet pton函数 对stdin,stdout 和STDOUT_FILENO,STDIN_FIL ...
- linux网络编程二:基础socket, bind, listen, accept, connect
linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h> #inc ...
- 服务器没有响应客户端,socket编程某些服务器对某些客户端没有响应的问题!!...
socket编程某些服务器对某些客户端没有响应的问题!! 我是这么用的t=serversocket(inetaddress,2); while(true){ t=y.accept(); out=new ...
- Linux Socket编程
IP socket 是在其上建立高级Internet 协议的最低级的层:从HTTP到SSL到POP3到Kerberos再到UDP-Time,每种Internet协议都建立在它的基础上.为了实现自定义的 ...
- linux下sig_pipe函数,linux socket编程 出现信号SIGPIPE,分析及解决
在编写一个仿QQ软件,C/S模式.出现的问题:当客户机关闭时,服务器也随着关闭,纠结很久之后,我gdb了下,出现下面提示信息: Program received signal SIGPIPE, Bro ...
- Windows Socket和Linux Socket编程的区别
2019独角兽企业重金招聘Python工程师标准>>> 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2. ...
最新文章
- 运维工程师的职责和前景
- 并发 线程交替执行_并发与并行的区别
- Java记录 -1- 基础JDK
- 白炽灯可控硅调光程序
- mysql主主备份_MySQL主从备份和主主备份配置+Keepalived+MySQL读写分离
- BioPython-1
- 很多人理解互联网是“年轻化”
- PowerDesigner在生成SQL时报错Generation aborted due to errors detected during the verification of the mod
- mybatis---知识点复习
- libcmtd.lib(wincrt0.obj) : error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 __tmainCRTStartup 中被引用
- 给物体赋值 只改变transform.position的某一维,访问另一个脚本的变量以及给物体用脚本动态添加属性
- python小白使用pycharm新建项目,import什么内置包都报错
- 微信iOS端无法执行jquery on()方法
- 从苦寻ADSL拨号王想到的 -- 需到用时方恨知道的少啊
- 在线流程图和思维导图开发技术详解(五)
- 基于Master-DistributedMaster-Slave架构的replication
- NUCLEO-L432KC实现GPIO控制(STM32L432KC)
- AT8637S(PHS/EN输入接口单通道0.8A低压H桥IC)
- 游戏装备mysql表设计_Game游戏数据库人物表,装备表,技能表
- java 角色管理代码_后台管理系统-角色管理模块