1.我們應該先了解udp和tcp協議
首先udp和tcp是基於傳輸層的協議
我們需要了解udp和tcp的特性
tcp協議的特性:
(1) 面向連線的服務;
(2) 可靠的資料傳輸服務;
(3) 面向位元組流。
udp協議的特性:
(1) 無連線服務;
(2) 不可靠的資料傳輸;
(3) 面向資料報;
以下是流行網際網路應用層及其應用層協議和支撐的運輸協議:
應用應用層協議
支撐的運輸層協議
電子郵件
smtp
tcp遠端終端訪問
tcp檔案傳輸協議
ftptcp
流式**
tcp網際網路**
sipudp和
tcp用udp實現的cs
server.c
#include#include#include#include#include#include#includestatic void usage()
int main(int argc,char* argv)
int sock=socket(af_inet,sock_dgram,0);//udp使用sock_dgram
if(sock<0)
printf("%d\n",sock);
//填充套接字
struct sockaddr_in local;
local.sin_family=af_inet;
local.sin_port=htons(atoi(argv[2]));
local.sin_addr.s_addr=inet_addr(argv[1]);
//繫結
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)
//接收和傳送
char buf[1024];
struct sockaddr_in client;
while(1)
}return 0;
}
client.c
#include#include#include#include#include#include
static void usage()
int main(int argc,char* argv)
int sock=socket(af_inet,sock_dgram,0);//udp使用sock_dgram
if(sock<0)
printf("%d\n",sock);
//填充套接字
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]);
//傳送和接收
char buf[1024];
struct sockaddr_in peer;
while(1)}}
return 0;
}
基於tcp實現的cs(一對一的)
server.c
// ./server 192.168.x.x 8080//伺服器這樣跑,命令列需要獲得192.168.x.x和埠號
static void usage()
int startup(const char *ip,int port)
//套接字絕對是3,因為 0 1 2被佔
printf("fd :%d\n",fd);
//2.填充位元組
struct sockaddr_in local;
ipv4
local.sin_family=af_inet;
埠號
local.sin_port=htons(port);//將主機序列轉化為網路序列。4個位元組
對結構體可以整體初始化,但不可以整體賦值,要逐個賦值 ip(需要轉化)字串轉為4位元組網路序列
local.sin_addr.s_addr=inet_addr(ip);
//2.繫結
//判斷繫結是否成功,將本地資訊和檔案資訊繫結
if(bind(fd,(struct sockaddr*)&local,sizeof(local))<0)
printf("bind ok!");
//3.監聽套接字
if(listen(fd,10)<0)
printf("listen ok!");
return fd;
}int main(int argc,char* argv)
int listen_fd=startup(argv[1],atoi(argv[2]));
printf("bind and listen success,wait .....\n");
while(1)//迴圈
printf("get new client[%s:%d]\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
//伺服器read->read
while(1)
;ssize_t s=read(new_fd,buf,sizeof(buf)-1);
if(s>0)
else if(s==0)
else
}close(new_fd);
}return 0;
}
client.c
#include#include #include #include#include#include// ./client server_ip server_port
static void usage()
int main(int argc,char* argv)
// socket;
int sock=socket(af_inet,sock_stream,0);
if(sock<0)
printf("%d\n",sock);
//填充位元組
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]);
printf("connect ok\n");
//connect
if(connect(sock,(struct sockaddr*)&server,sizeof(server))==-1)
char buf[1024]=;
printf("ok\n");
while(1)}}
close(sock);
return 0;
}
通過以上**我們可以更加了解tcp和udp通訊 基於tcp和udp的socket通訊
做個小遊戲的project用到了socket程式設計,於是,就在網上查閱了一下資料,下面簡單總結一下。1.什麼是socket socket是在應用層與傳輸層之間的乙個抽象層,它把tcp ip層複雜的操作抽象為幾個介面 用層的程序實現網路通訊,使得不同主機的相關程序之間交換資料。2.什麼是tcp和ud...
基於Socket的UDP和TCP協議
一 概述 tcp 傳輸控制協議 和udp 使用者資料報協議 是網路體系結構tcp ip模型中傳輸層一層中的兩個不同的通訊協議。tcp 傳輸控制協議,一種面向連線的協議,給使用者程序提供可靠的全雙工的位元組流,tcp套介面是位元組流套介面 stream socket 的一種。udp 使用者資料報協議。...
基於TCP協議的C S通訊
一 環境 os win10 ide visual studio 2010 二 在同一解決方案下新建兩個win32控制台應用程式,專案名分別是server和client,分別在兩個專案的原始檔下新增server.cpp和client.cpp server.cpp include include inc...