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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Beginning Winsock Programming - Simple TCP server

Introduction

The WinSock (Windows Sockets) API is a socket programming library for Microsoft Windows Operating Systems. It was originally based on Berkeley sockets. But several Microsoft specific changes were employed. In this article I shall attempt to introduce you to socket programming using WinSock, assuming that you have never done any kind of network programming on any Operating System.

If you only have a single machine, then don't worry. You can still program WinSock. You can use the local loop-back address called localhost with the IP address 127.0.0.1. Thus if you have a TCP server running on your machine, a client program running on the same machine can connect to the server using this loop-back address.

Simple TCP Server

In this article I introduce you to WinSock through a simple TCP server, which we shall create step by step. But before we begin, there are a few things that you must do, so that we are truly ready for starting our WinSock program

  • Initially use the VC++ 6.0 App Wizard to create a Win32 console application.?
  • Remember to set the option to add support for MFC
  • Open the file stdafx.h and add the following line :- #include <winsock2.h>
  • Also #includeconio.h and iostream just after winsock2.h
  • Take Project-Settings-Link and add ws2_32.lib to the library modules list.

The main function

				int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;	
	
    cout << "Press ESCAPE to terminate program\r\n";
    AfxBeginThread(ServerThread,0);
    while(_getch()!=27);
	
    return nRetCode;
}

What we do in our main() is to start a thread and then loop a call to _getch(). _getch() simply waits till a key is pressed and returns the ASCII value of the character read. We loop till a value of 27 is returned, since 27 is the ASCII code for the ESCAPE key. You might be wondering that even if we press ESCAPE, the thread we started would still be active. Don't worry about that at all. When main() returns the process will terminate and the threads started by our main thread will also be abruptly terminated.

The ServerThread function

What I will do now is to list our ServerThread function and use code comments to explain what each relevant line of code does. Basically what our TCP server does is this. It listens on port 20248, which also happens to be my Code Project membership ID. Talk about coincidences. When a client connects, the server will send back a message to the client giving it's IP address and then close the connection and go back to accepting connections on port 20248. It will also print a line on the console where it's running that there was a connection from this particular IP address. All in all, an absolutely useless program, you might be thinking. In fact some of you might even think this is as useless as SNDREC32.EXE which comes with Windows. Cruel of those people I say.

UINT  ServerThread(LPVOID pParam)
{	
    cout << "Starting up TCP server\r\n";

    //A SOCKET is simply a typedef for an unsigned int.//In Unix, socket handles were just about same as file //handles which were again unsigned ints.//Since this cannot be entirely true under Windows//a new data type called SOCKET was defined.
    SOCKET server;

    //WSADATA is a struct that is filled up by the call //to WSAStartup
    WSADATA wsaData;

    //The sockaddr_in specifies the address of the socket//for TCP/IP sockets. Other protocols use similar structures.
    sockaddr_in local;

    //WSAStartup initializes the program for calling WinSock.//The first parameter specifies the highest version of the //WinSock specification, the program is allowed to use.int wsaret=WSAStartup(0x101,&wsaData);

    //WSAStartup returns zero on success.//If it fails we exit.if(wsaret!=0)
    {
        return0;
    }

    //Now we populate the sockaddr_in structure
    local.sin_family=AF_INET; //Address family
    local.sin_addr.s_addr=INADDR_ANY; //Wild card IP address
    local.sin_port=htons((u_short)20248); //port to use//the socket function creates our SOCKET
    server=socket(AF_INET,SOCK_STREAM,0);

    //If the socket() function fails we exitif(server==INVALID_SOCKET)
    {
        return0;
    }

    //bind links the socket we just created with the sockaddr_in //structure. Basically it connects the socket with //the local address and a specified port.//If it returns non-zero quit, as this indicates errorif(bind(server,(sockaddr*)&local,sizeof(local))!=0)
    {
        return0;
    }

    //listen instructs the socket to listen for incoming //connections from clients. The second arg is the backlogif(listen(server,10)!=0)
    {
        return0;
    }

    //we will need variables to hold the client socket.//thus we declare them here.
    SOCKET client;
    sockaddr_in from;
    int fromlen=sizeof(from);

    while(true)//we are looping endlessly
    {
        char temp[512];

        //accept() will accept an incoming//client connection
        client=accept(server,
            (struct sockaddr*)&from,&fromlen);
		
        sprintf(temp,"Your IP is %s\r\n",inet_ntoa(from.sin_addr));

        //we simply send this string to the client
        send(client,temp,strlen(temp),0);
        cout << "Connection from " << inet_ntoa(from.sin_addr) <<"\r\n";
		
        //close the client socket
        closesocket(client);

    }

    //closesocket() closes the socket and releases the socket descriptor
    closesocket(server);

    //originally this function probably had some use//currently this is just for backward compatibility//but it is safer to call it as I still believe some//implementations use this to terminate use of WS2_32.DLL 
    WSACleanup();

    return0;
}

Testing it out

Run the server and use telnet to connect to port 20248 of the machine where the server is running. If you have it on the same machine connect to localhost.

Sample Output

We see this output on the server

E:\work\Server\Debug>server
Press ESCAPE to terminate program
Starting up TCP server
Connection from 203.200.100.122
Connection from 127.0.0.1
E:\work\Server\Debug>

And this is what the client gets

nish@sumida:~$ telnet 202.89.211.88 20248
Trying 202.89.211.88...
Connected to 202.89.211.88.
Escape character is '^]'.
Your IP is 203.200.100.122
Connection closed by foreign host.
nish@sumida:~$

Conclusion

Well, in this article you learned how to create a simple TCP server. In further articles I'll show you more stuff you can do with WinSock including creating a proper TCP client among other things. If anyone has problems with compiling the code, mail me and I shall send you a zipped project. Thank you.

About Nishant Sivakumar



Editor
Site Builder
Nish is a real nice guy living in Toronto who has been coding since 1990, when he was 13 years old. Originally from sunny Trivandrum in India, he has moved to Toronto so he can enjoy the cold winter and get to play in some snow.

He works for The Code Project and is in charge of the MFC libraries Ultimate Toolbox, Ultimate Grid and Ultimate TCP/IP that are sold exclusively through The Code Project Storefront. He frequents the CP discussion forums when he is not coding, reading or writing. Nish hopes to visit at least three dozen countries before his human biological mechanism stops working (euphemism used to avoid the use of the d-word here). Oh btw, it must be mentioned that normally Nish is not inclined to speak about himself in the 3rd person.

Nish has been a Microsoft Visual C++ MVP since October, 2002 - awfully nice of Microsoft, he thinks. He maintains an MVP tips and tricks web site - www.voidnish.com where you can find a consolidated list of his articles, writings and ideas on VC++, MFC, .NET and C++/CLI. Oh, and you might want to check out his blog on C++/CLI, MFC, .NET and a lot of other stuff - blog.voidnish.com

Nish loves reading Science Fiction, P G Wodehouse and Agatha Christie, and also fancies himself to be a decent writer of sorts. He has authored a romantic comedy Summer Love and Some more Cricket as well as a programming book – Extending MFC applications with the .NET Framework.

posted on 2006-04-18 17:41 楊粼波 閱讀(646) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品视频yy9299一区| 久久看片网站| 国产精品成人一区二区| 亚洲婷婷在线| 亚洲深夜福利| 国产片一区二区| 久久久天天操| 毛片av中文字幕一区二区| 在线观看日产精品| 亚洲黄色免费电影| 久热精品视频在线观看| 亚洲精品久久久久久下一站| 日韩图片一区| 国产午夜精品福利| 欧美激情在线| 欧美午夜在线| 欧美成人亚洲成人| 欧美日韩123| 欧美综合国产| 欧美 日韩 国产精品免费观看| 日韩一本二本av| 亚洲欧美日韩在线综合| 亚洲成人原创| 亚洲性夜色噜噜噜7777| 亚洲国产女人aaa毛片在线| 亚洲精品美女在线| 国产一区91| 亚洲精品久久久久久久久久久| 国产欧美韩日| 亚洲国产精品一区在线观看不卡| 欧美三级在线| 欧美高清在线精品一区| 国产精品毛片大码女人| 欧美成黄导航| 国产日本欧美一区二区三区| 亚洲成人在线免费| 国内偷自视频区视频综合| 91久久亚洲| 国产综合色产在线精品| 99热在线精品观看| 在线免费观看视频一区| 亚洲一区二区三区免费视频| 亚洲国产精品va在线看黑人动漫 | 欧美伊人影院| 欧美日本成人| 亚洲国产高清一区| 国产亚洲一区在线| 亚洲亚洲精品在线观看 | 伊人婷婷欧美激情| 亚洲综合清纯丝袜自拍| 一区二区三区久久网| 蜜臀va亚洲va欧美va天堂| 久久久久免费| 国内精品一区二区三区| 性欧美1819sex性高清| 午夜精品成人在线视频| 欧美日韩中文字幕在线视频| 欧美韩日一区| 亚洲国产精品999| 久久久久久999| 欧美.com| 亚洲成色777777女色窝| 国精品一区二区三区| 午夜欧美大片免费观看| 欧美中文日韩| 国产日韩精品一区二区三区| 亚洲色图综合久久| 午夜精品久久99蜜桃的功能介绍| 欧美日韩精品伦理作品在线免费观看| 最新成人av在线| 99视频精品在线| 欧美日韩国产美女| 中文在线资源观看网站视频免费不卡 | 久久激情综合网| 欧美/亚洲一区| 亚洲精品在线观看免费| 欧美日韩免费观看一区=区三区| 日韩视频在线观看| 欧美一区永久视频免费观看| 国产精品网站在线观看| 久久国产精彩视频| 亚洲福利视频在线| 亚洲深夜激情| 国产伦理一区| 久久天天躁狠狠躁夜夜爽蜜月 | 欧美一级视频| 影音先锋久久久| 欧美成年人在线观看| 日韩午夜中文字幕| 欧美在线在线| 亚洲国产导航| 国产精品a久久久久| 久久久久国内| 亚洲免费不卡| 久久亚洲国产精品日日av夜夜| 一区在线影院| 欧美日韩一区二区三区四区在线观看| 亚洲一级在线| 亚洲第一精品夜夜躁人人爽| 中文精品在线| 亚洲第一网站免费视频| 欧美色欧美亚洲另类二区| 久久精品国产欧美亚洲人人爽| 亚洲国产成人精品女人久久久| 亚洲免费在线精品一区| 亚洲高清免费在线| 国产精品久久九九| 快射av在线播放一区| 亚洲视频导航| 亚洲国产精品久久| 久久亚洲精品视频| 亚洲欧美成aⅴ人在线观看| 亚洲福利视频网站| 国产日韩av高清| 欧美视频精品一区| 欧美gay视频激情| 午夜精品www| 中文精品一区二区三区| 欧美韩国日本一区| 久久野战av| 欧美有码在线视频| 亚洲在线中文字幕| 日韩一区二区高清| 亚洲高清二区| 黄色一区三区| 国产欧美在线观看| 国产精品一区免费视频| 欧美日韩国产精品| 欧美18av| 老牛国产精品一区的观看方式| 性做久久久久久| 亚洲精品国产视频| 伊人成年综合电影网| 国产精品一区毛片| 国产精品综合久久久| 国产精品高潮视频| 欧美午夜视频在线| 国产精品国产三级国产专播精品人| 欧美大片在线观看一区| 免费观看30秒视频久久| 久久一区免费| 欧美91福利在线观看| 男女精品视频| 欧美区一区二| 欧美日韩综合在线| 欧美日韩一区综合| 国产精品久久综合| 国产日韩欧美不卡在线| 国产日韩一区二区三区在线播放| 国产精品一区二区三区四区| 国产精品久久久久免费a∨大胸| 欧美日韩免费一区| 国产精品久久久久9999吃药| 国产精品日韩欧美大师| 国产一区二区精品| 影院欧美亚洲| 亚洲精品美女免费| 亚洲午夜极品| 欧美一级久久久| 久久久xxx| 亚洲电影中文字幕| 99精品99| 欧美一区二区三区男人的天堂| 欧美在线不卡视频| 蜜月aⅴ免费一区二区三区| 欧美精品v日韩精品v韩国精品v| 欧美片第1页综合| 国产精品一区二区久久精品 | 欧美精品一卡二卡| 国产精品一区二区三区成人| 在线成人激情| 在线视频中文亚洲| 久久深夜福利免费观看| 亚洲人成在线观看| 欧美一区二区三区精品| 可以看av的网站久久看| 欧美午夜电影网| 在线日韩电影| 亚洲图片欧美午夜| 麻豆久久婷婷| 日韩图片一区| 久久亚洲二区| 国产精品欧美经典| 最新日韩中文字幕| 欧美一激情一区二区三区| 欧美激情视频一区二区三区在线播放| 日韩午夜一区| 久久这里只精品最新地址| 国产精品免费一区豆花| 亚洲精品少妇网址| 久久夜色精品亚洲噜噜国产mv| 亚洲精品一区二区三区99| 久久九九国产| 国产精品一区二区久久久| 日韩视频一区二区三区| 久久久久久久久伊人| 一区二区三区国产在线观看| 免费久久99精品国产自| 国产自产高清不卡| 性亚洲最疯狂xxxx高清|