建立套接字 socket()
填充伺服器網路資訊結構體 sockaddr_in
將套接字與伺服器網路資訊結構體繫結 bind()
將套接字設定為被動監聽狀態 listen()
阻塞等待客戶端的連線請求 accept()
進行通訊 recv()
/send
()
建立套接字 socket()
填充伺服器網路資訊結構體 sockaddr_in
傳送客戶端的連線請求 connect()
進行通訊 send()
/recv
()
socket()
#include
/* see notes */
#include
intsocket
(int domain,
int type,
int protocol)
; 功能:建立乙個套接字,返回乙個檔案檔案描述符
引數:domain 通訊域,協議族
af_unix 本地通訊
af_inet ipv4網路協議
af_inet6 ipv6網路協議
type:型別
sock_stream 流式套接字,tcp
sock_dgram 資料報套接字,udp
sock_raw 原始套接字
protocol:再次新增的協議,一般為0,表示單一協議
返回值:
成功:檔案描述符
失敗:-1
例子:int sockfd;if(
(sockfd =
socket
(af_inet, sock_stream,0)
)<0)
bind()
#include
/* see notes */
#include
intbind
(int sockfd,
const
struct sockaddr *addr, socklen_t addrlen)
; 功能:將套接字與網路資訊結構體繫結
引數:sockfd:檔案描述符,socket的返回值
addr:網路資訊結構體
通用的(一般不用):
struct sockaddr
網路資訊結構體:sockaddr_in
#include
struct sockaddr_in
;
這個沒有用,為了使得sockaddr_in與sockaddr一樣大
unsigned
char sin_zero[
sizeof
(struct sockaddr)
- __sockaddr_common_size -
sizeof
(in_port_t)
-sizeof
(struct in_addr)];
};addrlen:addr的長度
返回值:
成功:0
失敗:-1
例子:struct sockaddr_in serveraddr;
serveraddr.sin_family = af_inet;
serveraddr.sin_port =
htons
(8888);
serveraddr.sin_addr.s_addr =
inet_addr
("192.168.1.189");
if(bind
(sockfd,
(struct sockaddr *
)&serveraddr,
sizeof
(struct sockaddr_in)
)<0)
listen()
#include
/* see notes */
#include
intlisten
(int sockfd,
int backlog)
; 功能:將套接字設定為被動監聽的狀態
引數:sockfd:檔案描述符,socket的返回值
backlog:允許同時響應客戶端連線請求的個數,一般為5,10
返回值:
成功:0
失敗:-1
例子:if
(listen
(sockfd,5)
<0)
accept()
#include
/* see notes */
#include
intaccept
(int sockfd,
struct sockaddr *addr, socklen_t *addrlen)
; 功能:阻塞等待客戶端的連線請求
引數:sockfd:檔案描述符,socket的返回值
addr:被填充的客戶端的網路資訊結構體
addrlen:addr的長度
返回值:
成功:新的檔案描述符(用於與客戶端通訊)
失敗:-1
例子:int acceptfd;
struct sockaddr_in clientaddr;
socklen_t addrlen =
sizeof
(struct sockaddr);if
((acceptfd =
accept
(sockfd,
(struct sockaddr *
)&clientaddr,
&addrlen)
)<0)
connect()
#include
/* see notes */
#include
intconnect
(int sockfd,
const
struct sockaddr *addr, socklen_t addrlen)
; 功能:傳送客戶端連線請求
引數:sockfd:檔案描述符,socket的返回值
addr:自己填充的伺服器的網路資訊結構體
addrlen:addr的長度
返回值:
成功:0
失敗:-1
例子:if
(connect
(sockfd,
(struct sockaddr *
)&serveraddr,
sizeof
(serveraddr)
)<0)
send()
#include
#include
ssize_t send
(int sockfd,
const
void
*buf, size_t len,
int flags)
; 功能:傳送資料
引數:sockfd:檔案描述符
伺服器:accept的返回值
客戶端:socket的返回值
buf:傳送的資料
len:buf的長度
flags:標誌位
0 阻塞(預設的狀態)
msg_dontwait 非阻塞
返回值:
成功:傳送的資料的長度
失敗:-
1
recv()
#include
#include
ssize_t recv
(int sockfd,
void
*buf, size_t len,
int flags)
; 功能:接收資料
引數:sockfd:檔案描述符
伺服器:accept的返回值
客戶端:socket的返回值
buf:接收到的資料
len:buf的長度
flags:標誌位
0 阻塞(預設的狀態)
msg_dontwait 非阻塞
返回值:
成功:接收的資料的長度
0 傳送方關閉對應檔案描述符
失敗:-
1
socket網路程式設計tcp
usr bin env python coding utf 8 tcp 客戶端 import socket host 127.0.0.1 post 3214 s socket.socket try s.connect host,post data 你好!while data s.sendall da...
Socket網路程式設計之TCP
如果要用一句話總結tcp是什麼,我想應該是 tcp是網際網路運輸層的面向連線的 可靠的 基於位元組流的 全雙工的運輸協議 tcp運輸層協議服務 在分析tcp服務之前需要說明tcp在網路協議分層中處於哪個層次,下圖是tcp ip協議族的四個層次 tcp和udp都使用相同的網路層 ip 但是tcp向應用...
Socket 程式設計(TCP)
詳細請參見 點我o o哈!很不錯的一篇文章哈 下面是接收資料和傳送資料的函式 int receive socket fd,char sztext,int len if rc 0 return len cnt sztext rc cnt rc return len int send socket fd...