91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4.01 KB
    文件類型: .rar
    金幣: 1
    下載: 0 次
    發布日期: 2024-12-29
  • 語言: 其他
  • 標簽: UDP??C++??

資源簡介

語言為C++,在單機上模擬UDP可靠通信,使用選擇性重傳協議.

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
#include
#include
#pragma?comment(lib“wsock32“)
using?namespace?std;

#define?max_seq?15??????????????//設置能發送的最大的序號
#define?send_win?8????????????????//設置發送窗口?????????
char?buff[256];?????????????????//存儲你要發送的所有數據即
int?pos=0;??????????????????????//設置內存中已從數據源中讀取的位置
SOCKET?s;??????????????????//與服務器綁定的SOCKET
SOCKADDR_IN?ser;???????????//與服務器的地址
char?send_buf[send_win][256]IP[20]recv_mes[3];
//send_buf為發送窗口中存儲的數據IP服務器端的IP存儲服務器端反饋的數據
int?fromlen=sizeof(sockaddr);??//存儲sockaddr地址的長度
int?timeout=1000;??????????????//設置超時重發的時間

//初始化
int?Inti()
{ ??????????
WSADATA?wsadata;
WORD?rversion=MAKEWORD(20);
int?nret=WSAStartup(rversion&wsadata);
if(nret){
return?0;
}
if(wsadata.wVersion!=rversion){
return?0;
}
return?1;
}

//建立連接
int?connected()
{????????????
int?nport;
s=socket(AF_INETSOCK_DGRAM0);//創建數據報套接字
if(s==INVALID_SOCKET){
cout<<“套接口創建失敗(socket():“< return?0;
}
//設置超時重傳
if(setsockopt(sSOL_SOCKETSO_RCVTIMEO(char*)&timeoutsizeof(timeout))==SOCKET_ERROR){
cout<<“設置接收超時失敗。(setsockopt():“< closesocket(s);
return?0;
}
cout<<“請輸入服務器端的IP地址(連接本地可輸127.0.0.1):“< cin>>IP;
cout<<“請輸入端口號:“< cin>>nport;?????????????????????
//與服務器進行連接
ser.sin_family=AF_INET;
ser.sin_addr.s_addr=inet_addr(IP);
ser.sin_port=nport;

return?1;
}

//請求是否可以發送
int?send_request(char?send_buf[send_win][256]int?max_num)
{
send_buf[0][0]=‘3‘;
send_buf[0][1]=max_num;
send_buf[0][2]=‘\0‘;
while(1){
if(sendto(ssend_buf[0]strlen(send_buf[0])0(LPSOCKADDR)&sersizeof(sockaddr))==SOCKET_ERROR){
cout<<“出錯:發送失敗(sendto():“< return?0;
}
cout<<“等待IP為“<
if(recvfrom(srecv_messizeof(recv_mes)0(LPSOCKADDR)&ser&fromlen)==SOCKET_ERROR){
cout<<“出錯:接收失敗(recvfrom():“< return?0;
}
if(recv_mes[0]==‘4‘&&recv_mes[1]==max_num){
cout<<“服務器允許發送數據。開始發送...“< return?1;
}else?if(recv_mes[0]==‘4‘&&recv_mes[1]==0){
cout<<“接收方正忙.你稍后再發送數據。“< return?-1;
}
}
}

//從數據源buff中讀取記錄一個單詞一個幀設置要發送的數據結構
void?change(char?send_buf[send_win][256]int?sent_num)
{
int?num=2i=(sent_num-1)%send_win;
memset(send_buf[i]0sizeof(send_buf));
send_buf[i][0]=‘2‘;
send_buf[i][1]=sent_num;
while(buff[pos]&&(send_buf[i][num++]=buff[pos++])!=‘?‘);
send_buf[i][num]=‘\0‘;
}

//發送數據
int?send_data(char?send_buf[send_win][256]int?max_recvint?&max_sentint?max_num)
{
while(max_sent<(max_recv+send_win)&&max_sent ++max_sent;
change(send_bufmax_sent);
cout<<“正在發送第“< if(sendto(ssend_buf[(max_sent-1)%send_win]strlen(send_buf[(max_sent-1)%send_win])0(LPSOCKADDR)&sersizeof(sockad

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5530??2010-01-07?05:38??Client.cpp

?????文件???????5067??2010-01-07?05:37??Server.cpp

-----------?---------??----------?-----??----

????????????????10597????????????????????2


評論

共有 條評論