socket網路程式設計TCP中C S架構函式框架

2021-10-09 18:05:45 字數 4207 閱讀 5323

建立套接字 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...