1 常用函数

1.1   connect()

int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen);

  客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址。connect()成功返回0,出错返回-1,程序会阻塞。

1.2   bind():很少用

  由于客户端不需要固定的端口号,因此不必调用bind(),客户端的端口号由内核自动分配。注意,客户端不是不允许调用bind(),只是没有必要调用bind()固定一个端口号,服务器也不是必须调用bind(),但如果服务器不调用bind(),内核会自动给服务器分配监听端口,每次启动服务器时端口号都不一样,客户端要连接服务器就会遇到麻烦。

2 客户端的简单实现(C语言)

功能:连接到服务器后,如果服务器发送数据,则返回服务器发送的数据

unsigned char TcpRecvBuf[]  /* 缓存区,完整的以太帧最大也就1520或1518字节,如果去掉协议部分则可以更小 */
static void Task_TCP_Client (void *pdata)
{
struct sockaddr_in server, client;
int sock, iState;
int statusOk = ; struct ip_addr stIpAddr;
IP4_ADDR(&stIpAddr, REMOTE_IP_0, REMOTE_IP_1, REMOTE_IP_2, REMOTE_IP_3);
server.sin_family = AF_INET; /* 服务器地址类型为IPV4 */
server.sin_port = htons(); /* 服务器的端口号为5000 */
server.sin_addr.s_addr = stIpAddr.addr; /* 服务器的IP地址 */
   /*
* 以下4行为设置客户端的属性,可以不要,有系统自动分配端口号。即不调用bind函数。
*/
client.sin_family = AF_INET;
client.sin_port = htons( ); /* 设置客户端的端口 */
client.sin_addr.s_addr = htonl( INADDR_ANY );
bind( sock, (struct sockaddr *)&client, sizeof( client ) );/* 绑定本地接口 */
sock = socket( AF_INET, SOCK_STREAM, ); /* 使用TCP连接 */
/*
* 试图与服务器建立连接,阻塞程序
*/
iState = connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr));
while() {
statusOk = read(sock, TcpRecvBuf, sizeof(TcpRecvBuf));
if (statusOk > ) {
statusOk = write(sock, TcpRecvBuf,statusOk);
}
if (statusOk <= ){
iState = -;
while (iState == -) {
close( sock ); /* 关闭此连接 */
/*
* 下面将重新与服务器建立连接
*/
sock = socket( AF_INET, SOCK_STREAM, ); /* 使用TCP连接 */
bind( sock, (struct sockaddr *)&client, sizeof( client ) );/* 绑定本地接口 */
iState = connect(sock, (struct sockaddr *)&server, sizeof( server ));
OSTimeDly(); // 延迟一会儿,(ucos-ii的延迟函数,可以用其它延迟函数替代)
}
}
}
}

socket编程中客户端常用函数 以及简单实现的更多相关文章

  1. socket编程中客户端常用函数

    1 常用函数 1.1   connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...

  2. socket编程中服务器端常用函数 以及简单实现

    1 常用函数 1.1   socket() int socket(int family, int type, int protocol); socket()打开一个网络通讯端口,如果成功的话,返回一个 ...

  3. socket编程中write、read和send、recv之间的区别~转载

    socket编程中write.read和send.recv之间的区别   http://blog.csdn.net/petershina/article/details/7946615 一旦,我们建立 ...

  4. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

  5. numpy函数库中一些常用函数的记录

    ##numpy函数库中一些常用函数的记录 最近才开始接触Python,python中为我们提供了大量的库,不太熟悉,因此在<机器学习实战>的学习中,对遇到的一些函数的用法进行记录. (1) ...

  6. perl编程中的map函数示例

    转自:http://www.jbxue.com/article/14854.html 发布:脚本学堂/Perl  编辑:JB01   2013-12-20 10:20:01  [大 中 小] 本文介绍 ...

  7. Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  8. PHP socket 编程中的超时设置

    PHP socket 编程中的超时设置.网上找了半天也没找到.贴出来分享之:设置$socket 发送超时1秒,接收超时3秒: $socket = socket_create(AF_INET,SOCK_ ...

  9. 【C/C++开发】多线程编程中的join函数

    多线程编程中的join函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # coding: utf-8 # 测试多线程中join的 ...

随机推荐

  1. GhostDoc Pro v4.9.14093.Cracked.By.SubMain 一款好用的代码注释生成工具——VS插件

    一款比较好用的 VS 插件,能够快速生成注释. 这是 Pro 版本,与标准版本相比,支持对类.文件批量生成注释并且可以生成 CHM 帮助文件. 具体差异请转到: http://submain.com/ ...

  2. IIS发布网站遇到的异常

    1.0 HTTP 错误 401.3 - Unauthorized由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面.详细错误信息模块 IIS Web Core通 ...

  3. ASP.NET MVC图片管理(删除)

    上星期有写了一篇<ASP.NET MVC图片管理(上传,预览与显示)>http://www.cnblogs.com/insus/p/4620420.html 它只实现了上传功能,即时预览以 ...

  4. Clr静态数据Table-Valued函数

    前两天Insus.NET实现一个功能<在数据库中提供只读数据>http://www.cnblogs.com/insus/p/4384411.html ,在数据库中为程序提供静态数据.它是在 ...

  5. Web API应用架构在Winform混合框架中的应用(1)

    在<Web API应用架构设计分析(1)>和<Web API应用架构设计分析(2)>中对WebAPI的架构进行了一定的剖析,在当今移动优先的口号下,传统平台都纷纷开发了属于自己 ...

  6. Ajax实现定时刷新页面

    function deleteValue(){ var refresh = function() { $.ajax({   type:'post',   url:'/Application/index ...

  7. qt 自动产生 Guid 方法

    strcpy(cmd->uid,QUuid::createUuid().toString().toStdString().c_str());

  8. jdk源码分析之ArrayList

    ArrayList关键属性分析 ArrayList采用Object数组来存储数据 /** * The array buffer into which the elements of the Array ...

  9. Git tag 给当前分支打标签

    原文已经找不到出处,重新整理格式,仅作个人收藏! 标签(Tag)可以针对某一时间点的版本做标记,常用于版本发布. 列出tag $ git tag # 在控制台打印出当前仓库的所有tag $ git t ...

  10. maven安装与配置(第一天学习笔记)

    Maven下载:http://maven.apache.org/ 1.首先要确保JDK已经安装与配置(注意:用的是apache-maven-3.3.3的JDK1.6不行,我用的是JDK1.8) 2.把 ...