1、Socket服務(wù)器端:
Socket服務(wù)器端流程如下:加載套接字->創(chuàng)建監(jiān)聽的套接字->綁定套接字->監(jiān)聽套接字->處理客戶端相關(guān)請(qǐng)求。
下面是孫鑫VC詳解里面的服務(wù)器端的例子:
- #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_STREAM,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));
-
- listen(sockSrv,5);
-
- SOCKADDR_IN addrClient;
- int len=sizeof(SOCKADDR);
-
- printf("%s\n","welcome,the serve is started...");
- while (1)
- {
-
- SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
- char sendBuf[100];
- sprintf(sendBuf,"welcome %s to http://unblue2008.javaeye.com",inet_ntoa(addrClient.sin_addr));
-
-
- send(sockConn,sendBuf,100,0);
- char revBuf[100];
-
-
- recv(sockConn,revBuf,100,0);
-
- printf("%s\n",revBuf);
-
-
- closesocket(sockConn);
- }
- }
#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;
}
//創(chuàng)建監(jiān)聽的套接字
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//把U_LONG的主機(jī)字節(jié)順序轉(zhuǎn)換為TCP/IP網(wǎng)絡(luò)字節(jié)順序
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
//綁定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//將套接字設(shè)置為監(jiān)聽模式,準(zhǔn)備接受用戶請(qǐng)求
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
printf("%s\n","welcome,the serve is started...");
while (1)
{
//等待用戶請(qǐng)求到來
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"welcome %s to http://unblue2008.javaeye.com",inet_ntoa(addrClient.sin_addr));
//發(fā)送數(shù)據(jù)
send(sockConn,sendBuf,100,0);
char revBuf[100];
//接收數(shù)據(jù)
recv(sockConn,revBuf,100,0);
//打印接受數(shù)據(jù)
printf("%s\n",revBuf);
//關(guān)閉套接字
closesocket(sockConn);
}
}
注意:需要包含頭文件<Winsock2.h>,并且在工程設(shè)置的link里面加上ws32_2.dll
如果在VC中還有一個(gè)簡(jiǎn)單的加載套接字的方法:
- if (!AfxSocketInit())
- {
- AfxMessageBox("套接字加載失敗!");
- return false;
- }
if (!AfxSocketInit())
{
AfxMessageBox("套接字加載失敗!");
return false;
}
這個(gè)不需要包含上面注里面的頭文件和ws2_32.lib庫就可以實(shí)現(xiàn)加載套接字。
2、Socket客戶端:
Socket客戶端同樣需要先加載套接字,然后創(chuàng)建套接字,不過之后不用綁定和監(jiān)聽了,而是直接連接服務(wù)器,發(fā)送相關(guān)請(qǐng)求。
同樣貼出孫鑫VC詳解里面的客戶端的例子:(不是我偷懶,是人家實(shí)在寫的太好,無法超越

)
- #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);
-
- 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));
-
-
- char recBuf[100];
- recv(sockClient,recBuf,100,0);
- printf("%s\n",recBuf);
-
-
- send(sockClient,"this is 扈修非",strlen("this is 扈修非")+1,0);
-
- closesocket(sockClient);
- 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;
}
//創(chuàng)建套接字
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//把U_LONG的主機(jī)字節(jié)順序轉(zhuǎn)換為TCP/IP網(wǎng)絡(luò)字節(jié)順序
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
//向服務(wù)器發(fā)送請(qǐng)求
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//接受數(shù)據(jù)
char recBuf[100];
recv(sockClient,recBuf,100,0);
printf("%s\n",recBuf);
//發(fā)送數(shù)據(jù)
send(sockClient,"this is 扈修非",strlen("this is 扈修非")+1,0);
//關(guān)閉套接字
closesocket(sockClient);
WSACleanup();
}
需要加載的頭文件和庫同上
posted @
2009-12-15 23:24 fullfill 閱讀(160) |
評(píng)論 (0) |
編輯 收藏