int socket(int domain, int type, int protocol);
domain:位址族
- af_unix, af_local local communication unix域協議族
- af_inet ipv4 internet protocols
- af_inet6 ipv6 internet protocols
type: 指定建立的套接字的型別
- sock_stream //流式套接字
- sock_dgram //資料報套接字
- sock_raw //原始套接字:直接跳過傳輸層
protocol:指定乙個具體的協議,一般為0,不指定具體協議
返回值:成功返回套接字描述符, 失敗返回-1。
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
struct sockaddr
//internet 協議位址結構
struct sockaddr_in
//ipv4位址結構
struct in_addr
int listen(int socket, int backlog)
socket: 要設定監聽的套接字
backlog:監聽佇列上最大的請求數(dos(拒絕服務)攻擊即利用了這個原理,非法的連線占用了全部的連線數,造成正常的連線請求被拒絕。)
返回值:成功返回0,失敗返回-1
int accept(int socket, struct sockaddr *addr,socklen_t *addrlen)
socket: 監聽套接字;
address:指標,用來儲存客戶端的網路位址;
addrlen:指標,用來儲存客戶端網路位址的長度;
note: 此處在呼叫時,addrlen裡面需要儲存addr指向的那個結構體的大小,
函式返回時,addrlen指向的變數,儲存客戶端位址的實際大小。
返回值:成功返回乙個連線套接字,失敗-1
int connect(int socket, struct sockaddr *serv_addr,int addrlen)
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv)
struct sockaddr_in my_addr;
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family = af_inet;
my_addr.sin_port = htons(6666);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.222");
int res = bind(socket_fd,(struct sockaddr *)&my_addr,sizeof(my_addr));
if(res == -1)
res = listen(socket_fd,10);
if(res == -1)
struct sockaddr_in client_ip;
socklen_t len = sizeof(client_ip);
int fd = accept(socket_fd,(struct sockaddr *)&client_ip,&len);
if(fd == -1)
char *p = "hello word!";
write(fd,p,11); //開啟的是accept的返回值
char buf[20] = ;
read(fd,buf,20); //開啟的是accept的返回值
printf("%s\n",buf);
close(fd);
close(socket_fd);
return
0; }
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv)
struct sockaddr_in my_addr;
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family = af_inet;
my_addr.sin_port = htons(6666);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.222");
int res = connect(socket_fd,(struct sockaddr *)&my_addr,sizeof(my_addr));
if(res == -1)
char buf[20] = ;
read(socket_fd,buf,20);
printf("%s\n",buf);
char *p = "hello word!";
write(socket_fd,p,11);
close(socket_fd);
return
0; }
Socket通訊示例
一 最簡例程實現socket網路傳輸 伺服器端 比客戶端先執行 vi socket server.c 1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 include 10 includ...
簡單Socket通訊
示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的ip...
socket 簡單通訊
服務端 1.建立乙個服務端 import socket phone socket.socket 括號內不輸入,預設為family addressfamily.af inet type socketkind.sock stream proto 0 2.為服務端建立ip位址及埠號 phone.bind ...