keyit.focus();}
C語言TCP程式中的Hello World。以前一直用OO語言,現在用C語言寫著玩,思想上有點轉不過來彎,o(∩_∩)o...
Server:
#pragma comment(lib, "ws2_32.lib")
#include <Winsock2.h>
#include <stdio.h>
void main()
{
//版本協商
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1); //0x0101
err = WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return;
}
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
//wsaData.wVersion!=0x0101
{
WSACleanup();
return;
}
//建立Socket
SOCKET sockSvr = socket(AF_INET,SOCK_STREAM,0);
//建立IP地址和連接埠
SOCKADDR_IN addrSvr;
addrSvr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSvr.sin_family = AF_INET;
addrSvr.sin_port = htons(6000);
//綁定連接埠監聽
bind(sockSvr,(SOCKADDR*)&addrSvr,sizeof(SOCKADDR));
listen(sockSvr,5);
sockaddr_in addrClient;
int len = sizeof(sockaddr);
while(true)
{
//阻塞方法,獲得一個客戶Socket串連
SOCKET sockConn = accept(sockSvr,(sockaddr*)&addrClient,&len);
char sendbuffer[128];
sprintf(sendbuffer,"Welcom %s!",inet_ntoa(addrClient.sin_addr));
//向客戶Socket發送資料
send(sockConn,sendbuffer,strlen(sendbuffer)+1,0);
char recvbuffer[128];
//從客戶Soc接受資料
recv(sockConn,recvbuffer,128,0);
printf("%s\n",recvbuffer);
//關閉Socket
closesocket(sockConn);
}
closesocket(sockSvr);
//釋放Winsock資源
WSACleanup();
}
Client:
#pragma comment (lib,"ws2_32.lib")
#include <Winsock2.h>
#include <stdio.h>
void main()
{
//版本協商
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1); //0x0101
err = WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return;
}
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
//wsaData.wVersion!=0x0101
{
WSACleanup();
return;
}
//建立連向伺服器的通訊端
SOCKET sock = socket(AF_INET,SOCK_STREAM,0);
//建立地址資訊
SOCKADDR_IN hostAddr;
hostAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
hostAddr.sin_family = AF_INET;
hostAddr.sin_port = htons(6000);
//串連伺服器
connect(sock,(sockaddr*)&hostAddr,sizeof(sockaddr));
char revBuf[128];
//從伺服器獲得資料
recv(sock,revBuf,128,0);
printf("%s\n",revBuf);
//向伺服器發送資料
send(sock,"Hello Host!",12,0);
closesocket(sock);
}