資源簡介
網上的很多代碼都是將主函數中如何使用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 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? 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
評論
共有 條評論