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. 数论 - 筛法暴力打表 --- hdu : 12876 Quite Good Numbers

    Quite Good Numbers Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit ...

  2. c# 打开指定的网址

    System.Diagnostics.Process.Start(url);

  3. char导致的验证异常

    表的一个字段: Moblie  char(15) 对应的mvc代码: @Html.EditorFor(c => c.Mobile) [RegularExpression("^1[3|4 ...

  4. easyui的window插件再次封装

    easyui的window插件再次封装 说明:该插件弹出的弹出框在最顶层的页面中,而不是在当前页面所在的iframe中,它的可拖动范围是整个浏览器窗口:所以不能用JS的parent对象获取弹出它的父页 ...

  5. js带上框架和防止被iframe的代码

    1.永远都会带着框架<script language="JavaScript"><!--if (window == top)top.location.href = ...

  6. 关于jq ajax封装以及error的报错参数

    jq的ajax完整版本 $.ajax({ url: "GetCityByPId.ashx", data: {pId:pid}, dataType: "JSON" ...

  7. gitlab web hook

    https://pypi.python.org/pypi/glhooks/0.1.0 https://filippo.io/a-python-github-push-webhook-handler/ ...

  8. 算法:冒泡排序(python版)

    1.将n个元素从大到小排序后,选择第k个大的元素 #!/usr/bin/env python #coding -*- utf:8 -*- #冒泡排序选第k个元素 import random impor ...

  9. MYSQL 解锁与锁表

    解锁 第一种 show processlist; 找到锁进程,kill id ; 第二种 mysql>UNLOCK TABLES; 锁表 锁定数据表,避免在备份过程中,表被更新 mysql> ...

  10. Python中类的定义

    class Student(object): # 有点类似其它高级语言的构造函数 def __init__(self,name,score): self.name = name self.score ...