原始碼**於華清
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的應用...