基於UDP和TCP實現CS

2021-08-17 23:38:45 字數 3590 閱讀 8353

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...