第三章Linux網路基礎程式設計

2021-06-27 15:03:52 字數 3402 閱讀 9487

原始碼**於華清

1.tcp程式設計

客戶端(同乙個網段就可以通訊),過程詳細的得看具體的資料,在這只是個簡單的模版,方便自己查閱

#include #include #include #include #include #include #include #define n 64

typedef struct sockaddr sa;

int main(int argc, char *argv)

// *** int socket(int domain, int type, int protocol);

if ((sockfd = socket(pf_inet, sock_stream, 0)) < 0)

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = pf_inet;

servaddr.sin_port = htons(atoi(argv[2]));

servaddr.sin_addr.s_addr = inet_addr(argv[1]);

// *** int connect(int sockfd, const struct sockaddr *addr,

// socklen_t addrlen);

if (connect(sockfd, (sa *)&servaddr, sizeof(servaddr)) < 0)

send(sockfd, buf, n, 0);

recv(sockfd, buf, n, 0);

printf("recv from server : %s\n", buf);

close(sockfd);

return 0;

}

伺服器端

#include #include #include #include #include #include #include #define n 64

typedef struct sockaddr sa;

int main(int argc, char *argv)

// *** int socket(int domain, int type, int protocol);

if ((listenfd = socket(pf_inet, sock_stream, 0)) < 0)

// *** int bind(int sockfd, const struct sockaddr *addr,

// socklen_t addrlen);

bzero(&myaddr, sizeof(myaddr));

myaddr.sin_family = pf_inet;

myaddr.sin_port = htons(atoi(argv[2]));

myaddr.sin_addr.s_addr = inet_addr(argv[1]);

if (bind(listenfd, (sa *)&myaddr, sizeof(myaddr)) < 0)

// *** int listen(int sockfd, int backlog);

if (listen(listenfd, 5) < 0)

peerlen = sizeof(peeraddr);

while ( 1 )

printf("connection from [%s:%d]\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port));

/*recv(connfd, buf, n, 0);

printf("recv from client : %s\n", buf);

strcpy(buf, "welcome to farsight server");

send(connfd, buf, n, 0);

*/close(connfd);

} return 0;

}

2.udp程式設計

客戶端

#include #include #include #include #include #include #include #define n 64

typedef struct sockaddr sa;

int main(int argc, char *argv)

// *** int socket(int domain, int type, int protocol);

if ((sockfd = socket(pf_inet, sock_dgram, 0)) < 0)

// *** int bind(int sockfd, const struct sockaddr *addr,

// socklen_t addrlen);

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = pf_inet;

servaddr.sin_port = htons(atoi(argv[2]));

servaddr.sin_addr.s_addr = inet_addr(argv[1]);

while ( 1 )

return 0;

}

伺服器端

#include #include #include #include #include #include #include #define n 64

typedef struct sockaddr sa;

int main(int argc, char *argv)

// *** int socket(int domain, int type, int protocol);

if ((sockfd = socket(pf_inet, sock_dgram, 0)) < 0)

// *** int bind(int sockfd, const struct sockaddr *addr,

// socklen_t addrlen);

bzero(&myaddr, sizeof(myaddr));

myaddr.sin_family = pf_inet;

myaddr.sin_port = htons(atoi(argv[2]));

myaddr.sin_addr.s_addr = inet_addr(argv[1]);

if (bind(sockfd, (sa *)&myaddr, sizeof(myaddr)) < 0)

peerlen = sizeof(peeraddr);

while ( 1 )

return 0;

}

unix 網路程式設計 第三章

包裹函式 就是對有錯誤返回值的函式的封裝。在unix網路程式設計中用大寫表示。err sys 必須要errno 的值才能輸出錯誤?執行緒函式遇到錯誤的時候 不設定errno的值,而是把error的值作為函式的返回值。必須檢查某個確定的錯誤,並處理它,而不是終止程序執行。unix errno 值 每當...

《OpenGL程式設計基礎》第三章習題

又將近乙個月,我真混蛋啊,好吧,今次還是第三章,雖然已經看到第五章了,但是一直沒有做習題。公司準備用ogre。苦逼的我感覺還是要有點兒底子,不然哪兒看得懂 麼。為了知其然知其所以然。繼續。路漫漫其修遠兮,吾將好好學習,語文不太好,反正就是要表達這麼個意思。看了看第三章的習題。主要是一些glut的應用...

《OpenGL程式設計基礎》第三章習題

又將近乙個月,我真混蛋啊,好吧,今次還是第三章,雖然已經看到第五章了,但是一直沒有做習題。公司準備用ogre。苦逼的我感覺還是要有點兒底子,不然哪兒看得懂 麼。為了知其然知其所以然。繼續。路漫漫其修遠兮,吾將好好學習,語文不太好,反正就是要表達這麼個意思。看了看第三章的習題。主要是一些glut的應用...