c++Socket

来源:互联网 发布:电动摩托车淘宝网 编辑:程序博客网 时间:2024/05/21 09:13
1  写socket程序,链接器中应加入命令-lwsock32。

 

2

     #include

 

3

      套接字。

SOCKET RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

第一个参数决定IPv4,V6等,AF_INET是V4。

SOCK_DGRAM用于UDP,SOCK_STREAM用于TCP。

第三个参数是协议。

 

4

     地址格式。

sockaddr_in RecvAddr;

RecvAddr.sin_family = AF_INET;

RecvAddr.sin_port = htons(Port);

RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);

 

5

int iResult = 0;

WSADATA wsaData;

iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);

第一个参数,说明版本是2.2。第二个参数,接受winsock实例的细节。

 

6

bind(RecvSocket, (SOCKADDR *) & RecvAddr, sizeof (RecvAddr));

第一个参数是要绑定的socket。

第二个绑定的地址

第三个地址的长度

 

7

recvfrom(RecvSocket,RecvBuf, BufLen, 0, (SOCKADDR *) & SenderAddr, &SenderAddrSize);

一.套接字

二.Char* 要接收的字符串

三.Char[100] 则为100

四.……

五.传进来空指针即可。执行后,指针被赋值为发来数据源的细节。

六.地址的长度

 

8

sendto(SendSocket,SendBuf, BufLen, 0, (SOCKADDR *) & RecvAddr, sizeof (RecvAddr));

一.套接字

二.Char* 要发送的字符串

三.同上

四.……

五.要发送的地址

六.地址的长度。

 

9

closesocket(SendSocket);

WSACleanup();

 

server代码:

#include
#include
#include
#include
#include
// Link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")
using namespace std;
int main()
{
int iResult = 0;
WSADATA wsaData;
SOCKET RecvSocket;
sockaddr_in RecvAddr;
char RecvBuf[1024];
int BufLen = 1024;
sockaddr_in SenderAddr;
int SenderAddrSize = sizeof (SenderAddr);
WSAStartup(MAKEWORD(2, 2), &wsaData);
RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(8000);
RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(RecvSocket, (SOCKADDR *) & RecvAddr, sizeof (RecvAddr));
wprintf(L"Server is starting...n");
while(true)
{
recvfrom(RecvSocket,
RecvBuf, BufLen, 0, (SOCKADDR *) & SenderAddr, &SenderAddrSize);
printf("%s said: %sn",inet_ntoa(SenderAddr.sin_addr),RecvBuf);
char TimeBuf[1024];
SYSTEMTIME sys;
GetLocalTime( &sys );
sprintf(TimeBuf,"M/d/d d:d:d.d 星期n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);
sendto(RecvSocket,TimeBuf, BufLen, 0, (SOCKADDR *) & SenderAddr, sizeof (SenderAddr));
}
closesocket(RecvSocket);
//-----------------------------------------------
// Clean up and exit.
wprintf(L"Exiting.n");
WSACleanup();
return 0;
}

client代码:

#include
#include
#include
#pragma comment(lib, "Ws2_32.lib")
int main()
{
WSADATA wsaData;
SOCKET ClientSocket = INVALID_SOCKET;
sockaddr_in ClientAddr;
char SendBuf[1024];
char RecvBuf[1024];
int BufLen = 1024;
WSAStartup(MAKEWORD(2, 2), &wsaData);
ClientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
ClientAddr.sin_family = AF_INET;
ClientAddr.sin_port = htons(6000);
ClientAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(ClientSocket, (SOCKADDR *) & ClientAddr, sizeof (ClientAddr));
//---------------------------------------------------------------------------绑定
strcpy(SendBuf,"I want the time. ");
wprintf(L"Sending a datagram to the receiver...n");
sockaddr_in ServerAddr;
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(8000);
ServerAddr.sin_addr.s_addr = inet_addr("192.168.1.100");
sendto(ClientSocket,SendBuf, BufLen, 0, (SOCKADDR *) & ServerAddr, sizeof (ServerAddr));
//----------------------------------------------------------------------------发送
sockaddr_in SenderAddr;
int SenderAddrSize=sizeof(SenderAddr);
recvfrom(ClientSocket,RecvBuf, BufLen, 0, (SOCKADDR *) & SenderAddr, &SenderAddrSize);
printf("%s said: %sn",inet_ntoa(SenderAddr.sin_addr),RecvBuf);
system("pause");
wprintf(L"Finished sending. Closing socket.n");
closesocket(ClientSocket);
wprintf(L"Exiting.n");
WSACleanup();
return 0;
}
0 0