青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-167  評論-8  文章-0  trackbacks-0

socket編程(udp tcp)代碼備忘 C++/C


sockets(套接字)編程有三種,流式套接字(SOCK_STREAM),數(shù)據(jù)報套接字(SOCK_DGRAM),原始套接字(SOCK_RAW); 基于TCP的socket編程是采用的流式套接字(SOCK_STREAM)。基于UDP采用的數(shù)據(jù)報套接字(SOCK_DGRAM).
1.TCP流式套接字的編程步驟
在使用之前須鏈接庫函數(shù):工程->設置->Link->輸入ws2_32.lib,OK!
服務器端程序:
1、加載套接字庫
2、創(chuàng)建套接字(socket)。 
3、將套接字綁定到一個本地地址和端口上(bind)。
4、將套接字設為監(jiān)聽模式,準備接收客戶請求(listen)。
5、等待客戶請求到來;當請求到來后,接受連接請求,返回一個新的對應于此次連接的套接字(accept)。
6、用返回的套接字和客戶端進行通信(send/recv)。
7、返回,等待另一客戶請求。
8、關(guān)閉套接字。
客戶端程序:
1、加載套接字庫
2、創(chuàng)建套接字(socket)。 
3、向服務器發(fā)出連接請求(connect)。
4、和服務器端進行通信(send/recv)。
5、關(guān)閉套接字。
服務器端代碼如下:
#include <Winsock2.h>//加裁頭文件
#include <stdio.h>//加載標準輸入輸出頭文件

void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );//1.1版本的套接字

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}//加載套接字庫,加裁失敗則返回

if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; 
}//如果不是1.1的則退出
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建套接字(socket)。

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//轉(zhuǎn)換Unsigned short為網(wǎng)絡字節(jié)序的格式
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//將套接字綁定到一個本地地址和端口上(bind)
listen(sockSrv,5);//將套接字設為監(jiān)聽模式,準備接收客戶請求(listen)。

SOCKADDR_IN addrClient;//定義地址族
int len=sizeof(SOCKADDR);//初始化這個參數(shù),這個參數(shù)必須被初始化

while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);accept的第三個參數(shù)一定要有初始值。
//等待客戶請求到來;當請求到來后,接受連接請求,返回一個新的對應于此次連接的套接字(accept)。
//此時程序在此發(fā)生阻塞
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",
    inet_ntoa(addrClient.sin_addr));
//用返回的套接字和客戶端進行通信(send/recv)。
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);//關(guān)閉套接字。等待另一個用戶請求
}
}

客戶端代碼如下:
#include <Winsock2.h>
#include <stdio.h>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );加載套接字庫
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; 
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);創(chuàng)建套接字(socket)。

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));向服務器發(fā)出連接請求(connect)。

char recvBuf[100];和服務器端進行通信(send/recv)。
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

closesocket(sockClient);關(guān)閉套接字。
WSACleanup();//必須調(diào)用這個函數(shù)清除參數(shù)
}

2.UDP型套接字。
服務器端(接收端)程序:
1、創(chuàng)建套接字(socket)。 
2、將套接字綁定到一個本地地址和端口上(bind)。
3、等待接收數(shù)據(jù)(recvfrom)。
4、關(guān)閉套接字。
客戶端(發(fā)送端)程序:
1、創(chuàng)建套接字(socket)。 
2、向服務器發(fā)送數(shù)據(jù)(sendto)。
3、關(guān)閉套接字。
服務器端代碼:
#include <Winsock2.h>
#include <stdio.h>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; 
}

SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100];

recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(sockSrv);
WSACleanup();
}

客戶端代碼:
#include <Winsock2.h>
#include <stdio.h>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; 
}

SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

sendto(sockClient,"Hello",strlen("Hello")+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}
===========下面是字符界面下的一個簡單UDP聊天程序=====
服務器端:==============================
#include <stdio.h>
#include <WINSOCK2.H>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return; 
}

SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6101);

bind(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr));

char sendBuf[100];
char recvBuf[100];
char tempBuf[100];
int len=sizeof(sockaddr);
    SOCKADDR_IN addrClient;
while(1)
{

recvfrom(sockSrv,tempBuf,strlen(tempBuf),0,(sockaddr*)&addrClient,&len);
if('q'!=tempBuf[0])
{
    sprintf(recvBuf,"%s say: %s",inet_ntoa(addrClient.sin_addr),tempBuf);
      printf("%s\n",recvBuf);
      printf("please input your data: ");
      gets(sendBuf);
      sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrClient,len);
}
else
{
    printf("%s request to quit the chat platform.\n",
    inet_ntoa(addrClient.sin_addr));
    sendto(sockSrv,"q",strlen("q")+1,0,(sockaddr*)&addrClient,len);
    break;
}
}
closesocket(sockSrv);
    WSACleanup();

}

客戶端:===============================
#include <stdio.h>
#include <WINSOCK2.H>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return; 
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
//htonl htons inet_addr inet_ntoa
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6101);

char sendBuf[100];
char tempBuf[100];
char recvBuf[100];
int len=sizeof(sockaddr);

while(1)
{
printf("please input your data: ");
gets(sendBuf);
sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrSrv,len);
recvfrom(sockClient,tempBuf,strlen(tempBuf),0,(sockaddr*)&addrSrv,&len);
if('q'!=tempBuf[0])
{
    sprintf(recvBuf,"%s say: %s",inet_ntoa(addrSrv.sin_addr),tempBuf);
    printf("%s\n",recvBuf);
}
else
{
    printf("the server has been closed!\n");
    sendto(sockClient,"q",strlen("q")+1,0,(sockaddr*)&addrSrv,len);
    break;
}

}

closesocket(sockClient);
WSACleanup();

posted on 2011-04-06 10:44 老馬驛站 閱讀(3113) 評論(0)  編輯 收藏 引用 所屬分類: c++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品视频在线播放| 亚洲激情影院| 久久久久国产精品www| 91久久精品国产91久久| 欧美一区二区三区四区在线观看| 一本一本久久| 亚洲一区三区视频在线观看 | 午夜电影亚洲| 性久久久久久久久| 久久久久久电影| 欧美69视频| 欧美巨乳在线观看| 国产精品一卡| 在线精品亚洲| 在线一区免费观看| 久久久精彩视频| 亚洲国产一区在线观看| 亚洲一区免费网站| 久久综合色8888| 欧美四级电影网站| 国产一区久久| 一二三区精品| 久久三级福利| 欧美区国产区| 极品尤物久久久av免费看| 一区二区三区不卡视频在线观看| 久久狠狠亚洲综合| 亚洲欧洲精品一区| 欧美一激情一区二区三区| 欧美国内亚洲| 亚洲夫妻自拍| 欧美制服第一页| 亚洲精品免费在线| 久久av一区二区| 欧美手机在线视频| 亚洲黄一区二区| 久久亚洲捆绑美女| 亚洲视频一区在线观看| 欧美xart系列高清| 欲色影视综合吧| 欧美一区国产一区| 中文无字幕一区二区三区| 欧美阿v一级看视频| 国产专区综合网| 亚洲欧美国产视频| 亚洲精品在线二区| 欧美xxxx在线观看| 91久久国产综合久久| 久久精品欧美| 亚洲自拍16p| 欧美视频在线视频| 99热精品在线观看| 亚洲国产精品成人精品| 久久婷婷人人澡人人喊人人爽| 国产欧美一区二区三区视频| 亚洲欧美在线磁力| 亚洲视频axxx| 国产精品一区二区三区免费观看 | 亚洲精品视频一区二区三区| 久久永久免费| 一区二区三区无毛| 免费在线观看成人av| 久久精品一区二区三区四区| 国产在线麻豆精品观看| 久久久久亚洲综合| 久久全国免费视频| 91久久嫩草影院一区二区| 欧美mv日韩mv国产网站app| 久久久久久尹人网香蕉| **网站欧美大片在线观看| 久久在线视频在线| 老司机免费视频久久| 91久久国产综合久久91精品网站| 欧美国产精品一区| 欧美精品91| 午夜久久影院| 久久久久国色av免费看影院 | 欧美日韩一卡二卡| 亚洲欧美日韩在线不卡| 午夜精品久久久久久99热软件| 国产精品视屏| 美女在线一区二区| 欧美国产日韩一区二区三区| 亚洲私人影院| 午夜日本精品| 亚洲欧洲一区二区三区久久| 亚洲乱码国产乱码精品精| 国产精品日韩一区| 欧美sm重口味系列视频在线观看| 欧美国产日韩亚洲一区| 午夜精品影院| 嫩草影视亚洲| 午夜视频一区在线观看| 久久综合福利| 欧美一级精品大片| 欧美阿v一级看视频| 欧美一区二区视频观看视频| 蜜桃视频一区| 性欧美激情精品| 免费欧美日韩| 欧美一站二站| 欧美精品三级在线观看| 久久精品卡一| 欧美日韩一区二区三区| 欧美xx视频| 亚洲一区二区高清视频| 欧美午夜视频在线| 亚洲激情中文1区| 亚洲国产欧美久久| 国产伦一区二区三区色一情| 欧美高清视频| 国产农村妇女精品一二区| 欧美国产激情| 国产亚洲欧美另类中文| 99视频一区二区| 亚洲国产黄色片| 午夜精品久久久久久久久久久 | 国产精品青草久久| 欧美不卡视频一区| 国产精品乱码妇女bbbb| 亚洲国产另类 国产精品国产免费| 国产精品亚洲综合天堂夜夜| 亚洲精品一区二区三| 一区二区三区在线观看国产| 亚洲一区二区三区视频| 一区二区三区不卡视频在线观看| 久久精品亚洲一区二区| 欧美一区二区视频网站| 国产精品男gay被猛男狂揉视频| 欧美激情综合色| 亚洲电影免费观看高清| 久久精品人人做人人爽电影蜜月| 欧美一区二区三区四区高清 | 久久国产精品高清| 国产精品私拍pans大尺度在线| 亚洲人成网站999久久久综合| 亚洲国产天堂久久综合网| 久久久久久亚洲精品不卡4k岛国| 久久久久九九九九| 狠狠色伊人亚洲综合成人| 亚洲欧美日韩在线播放| 久久国产精品久久久| 狠狠爱成人网| 麻豆精品在线观看| 亚洲第一页在线| 亚洲美女区一区| 欧美日韩国产不卡在线看| 亚洲精品国久久99热| 亚洲深夜影院| 国产精品自拍在线| 欧美有码在线观看视频| 玖玖玖国产精品| 亚洲黄色在线看| 欧美另类亚洲| 亚洲伊人久久综合| 久久99伊人| 在线精品视频免费观看| 欧美激情女人20p| 亚洲视频在线看| 久久精品中文字幕免费mv| 亚洲第一页在线| 欧美日韩在线观看视频| 亚洲影视在线播放| 亚洲欧美精品在线观看| 欧美日韩视频一区二区三区| 亚洲免费视频成人| 欧美国产另类| 亚洲色在线视频| 免费观看成人| 久久在线精品| 亚洲欧洲视频在线| 亚洲一区二区影院| 国产一区二区日韩| 欧美精品一区二区高清在线观看| 99国产精品久久久| 久久激情综合网| 亚洲欧洲一区二区三区| 国产精品入口夜色视频大尺度| 久久久久久久波多野高潮日日| 亚洲国产婷婷| 久久久久国产精品麻豆ai换脸| 亚洲日本在线视频观看| 国产欧美日韩亚洲一区二区三区| 麻豆91精品| 亚洲欧美美女| 亚洲第一页中文字幕| 欧美影院视频| 正在播放亚洲一区| 亚洲国产婷婷| 国际精品欧美精品| 国产精品久久久久久模特| 欧美 日韩 国产精品免费观看| 亚洲欧美在线一区| 99视频有精品| 亚洲激情婷婷| 麻豆精品网站| 久久精品免费观看| 性8sex亚洲区入口| 亚洲视频1区| 亚洲免费电影在线|