//以下這些是元庫檔案
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>

int main(void) //沒有接收別人的值,void main()沒有給別人值
{
struct sockaddr_in stsockaddr;
//先建立一個socket連線,SOCK_STREAM表示跑tcp協定,0表示預設值(通常都不會修改它就使用預設值),再把回傳值給SocketFD
int socketfd= socket(PF_INET, SOCK_STREAM, 0);
//建立一個buf,來接收資料
char buf[1024];
//建立一個clock(時鐘)
time_t clock;
//建立一個判斷socket是否錯誤,如果錯誤就不會繼續往下執行
if(-1 == socketfd)
{
perror("can not create socket");
exit(EXIT_FAILURE);
}
//一開始的空間把它設定為0
bzero(&stsockaddr, sizeof(stsockaddr));

stsockaddr.sin_family = AF_INET; //使用ipv4
stsockaddr.sin_port = htons(1100); //埠編號1100
stsockaddr.sin_addr.s_addr = INADDR_ANY; //接收IP
//接下來bind,第一個欄位SocketFD名稱,連結stSockAddr,建立大小的欄位
if(-1 == bind(socketfd,(struct sockaddr *)&stsockaddr, sizeof(struct sockaddr_in)))
{
perror("error bind failed");
close(socketfd);
exit(EXIT_FAILURE);
}
//再接下來listen(聽),最多接收3次
if(-1 == listen(socketfd, 3))
{
perror("error listen failed");
close(socketfd);
exit(EXIT_FAILURE);
}
//使用for(回窮迴圈)來接收動作
for(;;)
{
//一開始先建立一個connect,接收的動作(SocketFD)
int connect = accept(socketfd, NULL, NULL);
//偵測上一行指令動作
if(0 > connect)
{
perror("error accept failed");
close(socketfd);
exit(EXIT_FAILURE);
}
//主要的程式動作,建立一個clock給time
clock = time(NULL);
//使用標準格式放到buf
snprintf(buf, sizeof(buf), "%.24s\r\n", ctime(&clock));
send(connect, buf, strlen(buf), 0);

close(connect);
}

close(socketfd);
return 0;
}

參考來源:socket_tcp_server
 

Top