• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: socket  

资源简介

网上的很多代码都是将主函数中如何使用socket,却对socket的内部实现很少提及,本代码解决了这一问题,写明了socket内部函数的实现过程。但是socket它的实现需要加进部分头文件和调用下层的TCP、UDP,所以socket.c在编译时会出现一定错误,但是并不妨害理解socket内部的实现过程。(这只是第一个版本,随时更新)

资源截图

代码片段和文件信息

/***********************************************************************************************************************************
*项目名称:TCP/IP协议栈
*模块名称:socket模块
*模块功能:
*组长:张磊
*作者:胡启超
*时间:2011_8_3
************************************************************************************************************************************/

#include “Configure.h“ 
#include “socket.h“
#include “mbuf.h“

/***********************************************************************************************************************************
*函数名:Socket_Create
*功能描述:创建套接字,并指定其类型
*参数:type TCP指定SOCK_STREAM  UDP指定SOCK_DGRAM
*返回值:成功时返回新创建的套接字的索引号,失败时返回FALSE
*时间:2011_8_3 19:00
************************************************************************************************************************************/

uint8 Socket_Create(/*uint8 domain*/ uint8 type /*uint8 protocol*/ ) {
uint8 i;
for(i=0 ; i< MAX_SOCKET_NUM ; i++) {
if(socket_arry[i].EN == 0) {
socket_arry[i].EN = 1;
            socket_arry[i].type = type;
socket_arry[i].domain = AF_INET;
sockFD = i;
return(sockFD);
}
else continue;
}
return FALSE;
 
}


/***********************************************************************************************************************************
*函数名:Socket_Bind
*功能描述:将创建的套接字与本地IP、端口号绑定
*参数:sockFD 指定套接字的索引号,addr是指向sockaddr结构体的指针,该结构体中存放着本地的IP和端口号
*返回值:绑定成功时返回TRUE
*时间:2011_8_3 19:05
************************************************************************************************************************************/

uint8 Socket_Bind(uint8 sockFD  struct sockaddr * addr /* uint8 len*/) {
socket_arry[sockFD].src_ip [0] = addr->sin_addr[0];
socket_arry[sockFD].src_ip [1] = addr->sin_addr[1];
socket_arry[sockFD].src_ip [2] = addr->sin_addr[2];
socket_arry[sockFD].src_ip [3] = addr->sin_addr[3];

socket_arry[sockFD].src_port [0] = addr->sin_port[0];
socket_arry[sockFD].src_port [1] = addr->sin_port[1];

return TRUE;
}

功能描述
/***********************************************************************************************************************************
*函数名:Socket_Listen
*功能描述:监听套接字,等待建立连接时三次握手
*参数:指定套接字的索引号
*返回值:当建立连接成功时返回TRUE,建立连接失败时返回FALSE
*限制:该函数仅用于服务器端
*时间: 2011_8_3 19:10
************************************************************************************************************************************/

uint8 Socket_Listen(uint8 sockFD  /*uint16 backlog*/) {
if (sockFD < MAX_SOCKET_NUM) {
if (socket_arry[sockFD].type == SOCK_STREAM) {
    do {
OSTimeDly(100);
}while(!(syn_lis));
//发送需要对方的ip和端口号,即将mbuf中的对方ip和端口号赋值给监听的socket
socket_arry[sockFD].dst_ip [0] = recvbuf->dst_ip[0];  /*从mbuf中取得*/
socket_arry[sockFD].dst_ip [1] = recvbuf->dst_ip[1];
socket_arry[sockFD].dst_ip [2] = recvbuf->dst_ip[2];
socket_arry[sockFD].dst_ip [3] = recvbuf->dst_ip[3];

socket_arry[sockFD].dst_port [0] = recvbuf->dst_p

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      12391  2011-08-03 23:12  socket 1.0\socket.c

     文件       1757  2011-08-03 23:17  socket 1.0\socket.h

     目录          0  2011-08-03 20:41  socket 1.0

----------- ---------  ---------- -----  ----

                14148                    3


评论

共有 条评论