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. CSS魔法堂:你一定误解过的Normal flow

    前言  刚接触CSS时经常听到看到一个词"文档流",那到底什么是"文档流"呢?然后会看到"绝对定位和浮动定位能脱离文档流",从这句可以看到文 ...

  2. [Server] 搭建发布环境Web Deploy

    在Web Deploy前,实际上完全可以使用FTP方式发布网站. 如果你购买的只是虚拟空间,那FTP方式更广泛. 先来搭建一套FTP吧 添加FTP服务 在网站上添加FTP发布 配置FTP服务 FTP注 ...

  3. 点/边 双连通分量---Tarjan算法

    运用Tarjan算法,求解图的点/边双连通分量. 1.点双连通分量[块] 割点可以存在多个块中,每个块包含当前节点u,分量以边的形式输出比较有意义. typedef struct{ //栈结点结构 保 ...

  4. C#制作RDLC报表

    报表以前我只做过水晶报表,但是最近发现家里的VS上面居然没有水晶报表,发现水晶报表现在貌似已经不能完全免费的使用了,为了保险起见,就用了VS自带的RDLC报表,用完感觉其实也是够用的嘛~ 建立一RDL ...

  5. 更改(修改)mysql自动增序列改变从1000开始

    更改(修改)mysql自动增序列改变从1000开始 ************************************************************************** ...

  6. Firemonkey ListView 点击事件

    Firemonkey ListView 的点击事件一直让人摸不着头绪(各平台触发规则不太相同),因为它提供了点击相关的事件就有如下: OnChange:改变项目触发. OnClick:点击触发. On ...

  7. Junit很少出现的一个问题 No tests found matching ...

    java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=test2], {ExactMatcher:fDisp ...

  8. dubbo管理控制台安装

    官网提供的下载路径好像不能用了,我也是在网上找的包,现在提供下载路径:http://pan.baidu.com/s/1nvPHQvZ 下载下来了,把他解压到wabapps->ROOT里面,先把t ...

  9. SQL Server 的通用分页显示存储过程

    建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...

  10. [Cordova] 无法显示Alert视窗

    [Cordova] 无法显示Alert视窗 问题情景 今天开了一个Cordova专案做范例,将预设的index.html页面修改为下列内容.按下执行却发现,这样一个简单的范例无法正常执行.点击页面上的 ...