这里简单是编写个常用sock编程实例,仅仅只写了客户端的

#include <iostream>
#include <unistd.h>
#include <string>
#include <sys/select.h>
#include <sys/socket.h>
#include <strings.h>
using namespace std;

//client 
class Sock
{
private:
string m_srvIp;
unsigned int m_srvPort;
int m_sockfd;
struct sockaddr_in m_clientAddr;
struct sockaddr_in m_srvAddr;
bool m_isConnected;
public:
Sock(const string,unsigned );
virtual ~Sock();
bool init();
void connect();
int receive(char* ,int );
int send(const char* ,int );
int select();
bool isConnected();

};

Sock::Sock(const string srvIp,unsigned long srvPort)
{
m_srvIp = srvIp;
m_srvPort = srvPort;
m_isConnected = false;
}

Sock::~Sock()
{
close(m_sockfd);
}

bool Sock:: init()
{
if((m_sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
//throw(string("init sock failed!");
return false;
}
int opt=1;
setsockopt(m_sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&opt,sizeof(opt));

struct sockaddr_in clientAddr;
bzero(&clientAddr,sizeof(clientAddr));

clientAddr.sin_family = AF_INET;
clientAddr.sin_port = htons(8888);
//INADDR_ANY实际上是inet_addr("0.0.0.0");
clientAddr.sin_addr.s_addr = INADDR_ANY;

if(bind(m_sockfd,(sockaddr*)&clientAddr,sizeof(clientAddr)<0)
{
//throw("bind ip and port failed!");
return false;
}

return true;
}

void Sock:: connect()
{
struct sockaddr_in serverAddr;
bzero(&serverAddr,sizeof(serverAddr));

serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(m_srvPort);
serverAddr.sin_addr.s_addr = inet_addr(m_srvIp);

if(::connect(m_sockfd,(sockaddr*)&serverAddr,sizeof(serverAddr)))
{
throw("connect failed!");
}
m_isConnected = true;
}

int Sock::send(const char* buffer,int len)
{
return ::send(m_sockfd,buffer,len,0);
}

int Sock::receive(char* buffer,int len)
{
return recv(m_sockfd,buffer,len,0);
}

int Sock::select()
{
int result;

fd_set rdSet;
FD_ZERO(&rdSet);
FD_SET(m_sockfd,&rdSet);
struct timeval tv;
tv.tv_sec=10;
tv.tv_usec=100;

switch(result=::select(m_sockfd+1,&rdSet,NULL,NULL,&tv))
{
case 0:
{
//wait for timeout
continue;
}
break;
case -1:
{
//error

}
break;
default:
{
//文件描述符集合里有可读的文件描述符,if(FD_ISSET(m_sockfd,&fdSet));

}
break;

}
     
return result;
}

bool Sock::isConnected()
{
return m_isConnected;
}

int main()

{

Sock sc("192.168.130.111",8888);

sc.init();

sc.connect();

while(true)

{

sc.send();//

...

}

return 0;

}

linux 使用sock编程实例相关推荐

  1. Linux声音设备编程实例

    由于这些文件不是普通的文件,所以我们不能用ANSI C(标准C)的fopen.fclose等来操作文件,而应该使用系统文件I/O处理函数(open.read.write.lseek和close)来处理 ...

  2. Linux共享内存编程实例

    /*共享内存允许两个或多个进程进程共享同一块内存(这块内存会映射到各个进程自己独立的地址空间)从而使得这些进程可以相互通信.在GNU/Linux中所有的进程都有唯一的虚拟地址空间,而共享内存应用编程接 ...

  3. linux下python编程实例_python实现linux下使用xcopy的方法

    本文实例讲述了python实现linux下使用xcopy的方法.分享给大家供大家参考.具体如下: 这个python函数模仿windows下的xcopy命令编写,可以用在linux下 #!/usr/bi ...

  4. linux消息队列编程实例

    前言: 消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向其中按照一定的规则添加新消息:对消息队列有读权限的进程则可以从消息队列中读走消 ...

  5. Linux下shell编程实例

    1.用while语句创建一个根据输入的数值求累加和(1+2+3+....+n)的shell程序. while 若干个命令行1 do 若干个命令行2 done 结构 #! /bin/bash #file ...

  6. Linux shell脚本编程实例

    1.编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件拷贝到第一个位置参数指定的目录中. #!/bin/bashdir=$1 shift #将位置参数移动一位(即原先的第二个位置参 ...

  7. Linux下多线程编程实例解析

    提到线程,不得不让人想起进程,所以还是先写下进程与线程的区别吧! 一.进程与线程的区别 进程是程序执行的一个实例,进程有其自己独立的地址空间.一个线程可以含有多个线程,这也是为了提高系统资源利用率,线 ...

  8. linux下shell编程课程设计,Linux下shell编程实例

    1. 推断一文件是不是块或字符设备文件.假设是将其复制到 /dev 文件夹下 read -p "input a file:" filename if [ -b $filename ...

  9. Linux守护进程编程编写,linux守护进程编程实例

    /* *功能:创建一个守护进程,监视系统所有运行的进程 *时间:2013.4.14 */ #include #include #include #include #include #include # ...

  10. Linux底层网络编程--ARP,PING等

    一linux系统中获取网卡信息 获取网卡信息有两种方法.一种是读取系统文件.另外一种是通过系统API进行获取. 1.  读取系统文件 程序中通过读取/proc/net/dev文件即可以读取到系统中的所 ...

最新文章

  1. mysql之mysqldump备份恢复
  2. 机器学习Sklearn实战——线性回归
  3. java for loop_Java for循环执行了两次
  4. 手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考
  5. java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more
  6. Template Metaprogramming
  7. Objective-C 2.0 with Cocoa Foundation--- 6,NSObject的奥秘
  8. 测试markdown的发布
  9. python和c语言的区别-C语言、Java语言和python语言的区别在哪里
  10. maven聚合工程打包_史诗级!有手就会的Maven教程(八)
  11. Struts2之Action的基本配置
  12. 三种新姿势帮你写出精美简历
  13. 运营商5G商业模式研究
  14. 抓取百度页面html,百度蜘蛛不抓取页面的解决方法
  15. mysql 80070057_0x80070057错误原因
  16. 两个人体红外传感器计数,判断屋里的人数的单片机程序
  17. Freebase 文章数量超过英文维基百科达400万篇
  18. 【Python爬虫】:模拟登录QQ空间
  19. libxml2下载,下载地址大全
  20. html5左侧边导航右边显示页面,bootstrap如何实现左侧导航栏右侧网页

热门文章

  1. 爆款预订,2022 年最值得关注的后台框架 —— Fantastic-admin
  2. 基于短时时域处理中短时能量和过零率的语音端点检测方法
  3. Arnold材质节点篇-随机颜色抖动color_jitter、三平面triplanar、ambient_occlusion环境光遮蔽、curvature曲率
  4. linux下安装ffmpeg过程
  5. 不知道读什么?5种方法教你打造私房书单!
  6. java随机发扑克牌程序,java_扑克牌小程序
  7. sigmoid代码实现
  8. 论文阅读笔记(Region Proposal by Guided Anchoring)
  9. 如何去掉快捷方式上的小箭头
  10. 多少人,一边疯狂跳槽,一边疯狂后悔