#ifndef __errwrap__h
#define __errwrap__h
void perr_exit(const char *s);
void err_exit(const char *s);
int accept(int fd, struct sockaddr *sa, socklen_t *salenptr);
void bind(int fd, const struct sockaddr *sa, socklen_t salen);
void connect(int fd, const struct sockaddr *sa, socklen_t salen);
void listen(int fd, int backlog);
int socket(int family, int type, int protocol);
ssize_t read(int fd, void *ptr, size_t nbytes);
ssize_t write(int fd, const void *ptr, size_t nbytes);
void close(int fd);
ssize_t readn(int fd, void *vptr, size_t n);
ssize_t writen(int fd, const void *vptr, size_t n);
#endif
#include #include #include #include //錯誤處理與退出
void perr_exit(const char *s)
void err_exit(const char *s)
//發生連線錯誤或者被訊號中斷後,將再次進入accept。
int accept(int fd, struct sockaddr *sa, socklen_t *salenptr)
return n;
}void bind(int fd, const struct sockaddr *sa, socklen_t salen)
void connect(int fd, const struct sockaddr *sa, socklen_t salen)
void listen(int fd, int backlog)
int socket(int family, int type, int protocol)
//沒有讀取到資料,失敗原因是因為訊號中斷,則重新讀取
ssize_t read(int fd, void *ptr, size_t nbytes)
return n;
}ssize_t write(int fd, const void *ptr, size_t nbytes)
return n;
}void close(int fd)
ssize_t readn(int fd, void *vptr, size_t n)
else if (nread == 0)
break;
nleft -= nread;
ptr += nread;
} return n - nleft;
}ssize_t writen(int fd, const void *vptr, size_t n)
nleft -= nwritten;
ptr += nwritten;
} return n;
}
#include #include #include #include #include #include #include #include "errwrap.h"
#define server_port 8000
#define maxline 4096
int main()
else
{}} close(sock_fd);
}
#include #include #include #include #include #include #include #include #include #include #include "errwrap.h"
#define server_port 8000
#define maxline 4096
int main(int argc, char *argv)
char *ipstr=argv[1];
char buf[maxline];
//1.建立乙個socket
confd = socket(af_inet, sock_stream, 0);
//2.初始化伺服器位址
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = af_inet;
inet_pton(af_inet, ipstr, &serveraddr.sin_addr.s_addr);
serveraddr.sin_port = htons(server_port);
//3.鏈結伺服器
connect(confd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
//4.請求伺服器處理資料
while(fgets(buf,sizeof(buf),stdin))
//5.關閉socket
close(confd);
return 0;
}
linux網路程式設計基礎 網路基礎
客戶機 client 伺服器 server 模式。需要在通訊兩端各自部署客戶機和伺服器來完成資料通訊。瀏覽器 browser 伺服器 server 模式。只需在一端部署伺服器,而另外一端使用每台pc都預設配置的瀏覽器即可完成資料的傳輸。c s模式 優點缺點 資料快取本地,效率高 工作量大,開發周期更...
Linux網路程式設計基礎
伺服器端 server.c include include include include include define max line 100 process fuction,turn upper word to lower void my fun char p int main void st...
Linux 網路程式設計基礎
實際上就是socket套接字程式設計。socket是一套網路程式設計介面,類似於中間商一樣,上層使用者可以通過這些介面簡單完成網路通訊傳輸,不關心內部實現。由於傳輸層有兩個主要的協議 tcp udp,這兩個協議各不相同,因此實現流程也不同,所以socket程式設計就分為兩種。協議 協議特性 應用場景...