if ((newsock = accept(mysock.daemonsock, &addr, &len)) == -1)
return(-1); /* accept error. */
/* set this socket as a non-blocking socket. */
ioctl(newsock, fionbio, &flag);
fd_set(newsock, &mysock.readfds);
fd_set(newsock, &mysock.writefds);
fd_set(newsock, &mysock.exceptfds);
/* return ip address in the parameter. */
ipaddr->s_addr = addr.sin_addr.s_addr;
i = 0;
while (mysock.sockets[i] != 0) i++; /* look for a blank sockets position */
if (i >= 64)
mysock.sockets[i] = newsock;
mysock.socknum++;
return(i);
}int closeconnection(int sockno)
/* close a connection indicated by sockno. */
int querysocket**sg()
/* query sockets message. if succeed return message number, else return -1.
the message information stored in struct sockmsg. */
for (i=0; i<64; i++) /* data out ready message */
if (fd_isset(mysock.daemonsock, &efds))
sockmsg.acceptnum = -1; /* server socket error. */
for (i=0; i<64; i++) /* error message */
return(retcode);
}int sendpacket(int sockno, void *buf, int len)
/* send a packet. if succeed return the number of send data, else return -1 */
int recvpacket(int sockno, void *buf, int size)
/* receive a packet. if succeed return the number of receive data, else if the connection
is shutdown by peer then return 0, otherwise return 0-errno */
2.5.3 簡單伺服器程式示例
/* file name: server.c */
/* 這是乙個很簡單的重複伺服器程式,它初始化好被動套接字後,迴圈等待接收連線。如果接收到連線,它顯示資料套接字序號和客戶端的ip位址;如果資料套接字上有資料到來,它接收資料並顯示該連線的資料套接字序號和接收到的字串。*/
#include "tcpsock.h"
main(argc, argv)
int argc;
char **argv;
while (1)
else if (sockmsg.acceptnum == -1) /* 主套接字錯誤?*/
printf("daemon sockets error./n");
for (i=0; i< * 接收外來資料
} /* end while */
}2.5.4 簡單客戶程式示例
/* file name: client.c */
/* 客戶程式在執行時,先初始化資料結構,然後等待使用者輸入命令。它識別四個命令:
conn(ect): 和伺服器建立連線;
send: 給指定連線傳送資料;
clos(e): 關閉指定連線;
quit: 退出客戶程式。
*/#include "tcpsock.h"
main(argc, argv)
int argc;
char **argv;
while (1)
else if(!strncmp(cmd_buf, "send", 4))
else if (!strncmp(cmd_buf, "close", 4))
else if (!str
socket程式設計原理 三
程式在使用套接字前,首先必須擁有乙個套接字,系統呼叫socket 向應用程式提供建立套接字的手段,其呼叫格式如下 socket pascal far socket int af,int type,int protocol 該呼叫要接收三個引數 af type protocol。引數af指定通訊發生的...
socket程式設計原理(六)
closesocket sock exit 0 2.5 乙個通用的例項程式 在上一節中,我們介紹了乙個簡單的socket程式例項。從這個例子我們可以看出,使用socket程式設計幾乎有乙個模式,即所有的程式幾乎毫無例外地按相同的順序呼叫相同的函式。因此我們可以設想,設計乙個中間層,它向上提供幾個簡單...
Socket程式設計原理 1
兩種套接字 流套接字 sock stream tcp ip協議 資料報套接字 sock dgram udp ip協議 什麼是tcp ip udp?tcp ip transmission control protocol internet protocol 即傳輸控制協議 網間協議,是乙個工業標準的協...