網路套接字socket(tcp、server、client)
在實現套接字網路通訊之前,先來了解一下概念:
socket
socket這個詞在TCP/IP協議中,“IP地址+TCP或UDP埠號”唯一標識網
絡通訊中的一個程序,“IP地址+埠號”就稱為socket。
網路位元組序
網路通訊的時候必須知道埠號,如果傳送端是大端位元組序,接收端是小端位元組序,那麼最後看到的埠號就是不正確的埠號,所以,我們必須將埠號在傳送端和接收端之間轉換成統一的位元組序形式,TCP/IP協議規定,網路資料流應採用大端位元組序,即低地址高位元組
相關埠
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_); //協議型別
in_port_t sin_port; // Port number
struct in_addr sin_addr; // Internet address
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
socket:申請檔案描述符
int socket(int domain, int type, int protocol);
//protocol引數: 與特定的地址家族相關的協議,TCP協議一般為IPPROTO_TCP。也可以寫0,那麼系統會根據地址格式和套接字類別,自動選擇一個適合的協議。
listen:使上面申請到的檔案描述符進入監聽狀態
int listen(int sockfd, int backlog); //backlog連線佇列長度
bind:繫結本機的資訊,包括,IP地址型別,IP地址,埠號
int bind(int sockfd, cinst struct sockaddr *affr,
socklen_t addrlen);
accept:接受監聽套接字,成功返回一個檔案描述符(真正用於通訊的套接字)
int accept(int sockfd, struct sockaddr *addr,
sochlen_t *addrlen);
下面來完成一個tcp的客戶端和使用者端的編寫
//server.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int StartUp(int port,const char* ip)
{
int ListenSock = socket(AF_INET,SOCK_STREAM,0);
if(ListenSock < 0)
{
perror("socket");
exit(1);
}
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(port);
local.sin_addr.s_addr = inet_addr(ip);
if(bind(ListenSock,(struct sockaddr*)&local,sizeof(local)) < 0)
{
perror("bind");
exit(2);
}
if(listen(ListenSock,5) < 0)
{
perror("listen");
exit(3);
}
return ListenSock;
}
int main(int argc,const char* argv[])
{
if(argc != 3)
{
printf("input error\n");
return 1;
}
int len;
int listenSock = StartUp(atoi(argv[2]),argv[1]);
struct sockaddr_in client;
while(1)
{
int sock = accept(listenSock,(struct sockaddr*)&client,&len);//獲取客戶機的資訊
if(sock < 0)
{
perror("accept");
continue;
}
printf("get a client,ip is %s,port is %d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
char buf[1024];
while(1)
{
ssize_t s = read(sock,buf,sizeof(buf)-1);//伺服器進行讀資料
if(s > 0)
{
buf[s] = 0;
printf("client# %s\n",buf);
}
else
{
//資料已經讀完了,客戶端不傳送資料了
printf("client is quit!\n");
}
}
close(sock);
}
return 0;
}
//client.c
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<arpa/inet.h>
int main(int argc,const char* argv[])
{
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0)
{
perror("socket");
return 1;
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sock,(struct sockaddr*)&server,sizeof(server)) < 0)
{
perror("connect");
return 2;
}
char buf[1024];
while(1)
{
printf("send# ");
fflush(stdout);
//從標準輸入讀資料,讀到buf中,然後從buf寫到管道
ssize_t s = read(0,buf,sizeof(buf)-1);
if(s < 0)
{
perror("read");
return 3;
}
buf[s-1] = 0;
write(sock,buf,s);
}
close(sock);
return 0;
}
相關推薦
網路套接字socket(tcp、server、client)
在實現套接字網路通訊之前,先來了解一下概念: socket socket這個詞在TCP/IP協議中,“IP地址+TCP或UDP埠號”唯一標識網 絡通訊中的一個程序,“IP地址+埠號”就稱為socket。 網路位元組序 網路通訊的時候必須知道
嵌入式Linux網路程式設計,網路基礎,套接字socket(SOCK_STREAM、SOCK_DGRAM、SOCK_RAW),IP地址,埠號,位元組序,位元組序轉換函式,IP地址的轉換
文章目錄 1,socket 1.1,socket的型別(SOCK_STREAM、SOCK_DGRAM、SOCK_RAW) 1.2,socket的位置 2,IP地址 2.1,特殊IP地址: 3,埠號
《c語言從入門到精通》看書筆記——第16章 網路套接字程式設計(上)——網路
(1)TCP協議:傳輸協議(TCP)是一種提供克勞資料傳送的通用協議,他是TCP/IP體系結構中傳輸層上的協議。在傳送資料時,應用層的資料傳輸到傳輸層,傢伙是哪個TCP首部,資料就構成了報文。報文就是網路層IP的資料,如果再加上IP首部,就構成了IP資料報。TCP協議的C語言資料描述如下:
網路程式設計、常用的通訊協議、Socket套接字程式設計(Socket和ServerSocket)、埠號
網路程式設計: java語言中,提供了一套統一的程式設計介面。很多細節都已經底層化。 所在,可以進行無痛的網路通訊程式設計。 提供的是Socket套接字技術。 --常用的通訊協議: (1)TCP/IP:在通訊之前,需
趣談網路協議(九)套接字Socket
基於TCP協議的Socket程式函式呼叫過程 (1)TCP的伺服器要先監聽一個埠,一般是先呼叫bind函式,給這個Socket賦予一個IP地址和埠 (2)為什麼要有埠,當一個網路包來的時候,核心要通過TCP頭裡面的這個埠,來找到你這個應用程式,把包給你 (3)為什麼要有IP地
網路 協議 套接字socket TCP程式設計
網路; 通過物理線路將多臺計算機連線起來組成網際網路計算機平臺,實現多臺計算機的資料交換。 網路協議 ip --Internet protocal;32位(二進位制) 是一套通用規則,為了多臺計算機能在網路上進行網路通訊互聯而設計的協議。 本機地址;127.0.
網路程式設計二(套接字Socket、客戶端和服務端通訊問題)
在客戶機/伺服器工作模式中,在Server端,要準備接受多個Client端計算機的通訊。為此,除用IP地址標識Internet上的計算機之外,另還引入埠號,用埠號標識正在Server端後臺服務的執行緒。埠號與IP地址的組合稱為網路套接字(socket)。 Java語言在
1.socket程式設計:socket程式設計,網路位元組序,函式介紹,IP地址轉換函式,sockaddr資料結構,網路套接字函式,socket相關函式,TCP server和client
1Socket程式設計 socket這個詞可以表示很多概念: 在TCP/IP協議中,“IP地址+TCP或UDP埠號”唯一標識網路通訊中的一個程序,“IP 地址+埠號”就
套接字socket---網路套接字
套接字socket---網路套接字 網路套接字 採用迴路網路連線到一個網路套接字 迴路網路只包含一臺計算機,通常稱為localhost,IP地址為127.0.0.1,可以在/etc/hosts檔案中找到 例子: 客戶端發一個A給伺服
走進Linux核心網路 套接字的祕密—socket與sock
雙十一 今天是雙十一,記得還在念書的時候,每次都會參加京東圖書滿200-100的活動,然後腦子一熱屯一堆書。印象中人文類的書基本都會看,而電子資訊類的可能就只看了一半,甚至買過哪些都忘了。究其原因,主要是人文類的通常都是自己想看的,而技術類的就跟風看哪個銷量大買
TCP和UDP套接字程式設計 (java實現)
在瞭解網路程式設計之前,我們先了解一下什麼叫套接字 套接字即指同一臺主機內應用層和運輸層之間的介面 由於這個套接字是建立在網路上建立網路應用的可程式設計介面 因此也將套接字稱為應用程式和網路之間的應用程式程式設計介面! 關於TCP和UDP這裡就不作太多介紹了,我們知道TCP是面向連
網路程式設計基礎【林老師版】:簡單的 套接字通訊(一)
一、服務端程式碼 import socket #1、買手機 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # print(phone) #2、繫結手機卡 phone.bind(('127.0.0.1',8081)) #0-
網路程式設計套接字(Socket)
網路預備知識學習:https://blog.csdn.net/hansionz/article/details/85224786 網路程式設計套接字 一.IP地址和埠號 1.IP地址 2.埠號 2.1 什麼是埠號
程序筆記2:程序之間的通訊(UNIX域套接字socket)
socket的地址資料結構根據不同的系統以及網路環境有不同形式。為了使不同格式地址能夠被傳入套接字函式,必須強制將地址結構轉換為: struct sockaddr{ sa_family_t sa_family; /* address family*/ char
利用網路套接字實現TCP互動
我們來了解一下TCP互動流程: 大致流程如下: (1)伺服器根據地址的型別(屬於ipv4還是ipv6等)、socket型別(比如TCP、UDP)去建立socket,創建出的套接字socket本質
網路程式設計—套接字基礎 & 基本TCP套接字程式設計-基本套接字函式
套接字基礎 一個通用套接字地址結構sockaddr: struct sockaddr { unsigned short sa_family; //套接字的協議簇地址型別,AF_XX char sa_data[14];//儲存
套接字(二):Socket 套接字程式設計(附例項)
TCP/IP地址家族統一的套接字地址結構定義如下: struct sockaddr_in { short sin_family; //指定地址家族,即地址格式 unsigned short
套接字程式設計(一)----基於TCP協議
套接字(socket):可以看做是不同主機之間的程序進行雙向通訊的端點,即通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程。 **socket=Ip Address+TCP/UDP+port
Java Socket:飛鴿傳書的網路套接字
在古代,由於通訊不便利,一些聰明的人就利用鴿子會飛且飛得比較快、會辨認方向的優點,對其進行了馴化,用來進行訊息的傳遞——也就是所謂的“飛鴿傳書”。而在 Java 中,網路套接字(Socket)扮演了同樣的角色。 套接字(Socket)是一個抽象層,應用程
設置非阻塞的套接字Socket
api pad def while循環 ace 使用方法 小時 acc 使用 當使用socket()函數和WSASocket()函數創建套接字時,默認都是阻塞的。在創建套接字之後,通過調用ioctlsocket()函數,將該套接字設置為非阻塞模式。函數的第一個參數是套接字