环境:VS2013
#include<Winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
#define DEFAULT_PORT 8888
#define BUFFER_LENGTH 1024
void main()
{
int iPort = DEFAULT_PORT;
WSADATA wsaData;
SOCKET sSocket;
int iLen;
int iSend;
int iRecv;
char sendBuf[] = "Hello! I am server";
char recvBuf[BUFFER_LENGTH];
struct sockaddr_in ser, cli;
printf("-----------------\n");
printf("Server waiting\n");
printf("-----------------\n");
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("Failed to load Winsock.\n");
return;
}
sSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (sSocket == INVALID_SOCKET)
{
printf("socket(Failed:%d\n)", WSAGetLastError);
return;
}
ser.sin_family = AF_INET;
ser.sin_port = htons(8888);
ser.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sSocket, (LPSOCKADDR)&ser, sizeof(ser)) == SOCKET_ERROR)
{
printf("bind() Failed:%d\n", WSAGetLastError());
return;
}
iLen = sizeof(cli);
memset(recvBuf, 0, sizeof(recvBuf));
while (1)
{
iRecv = recvfrom(sSocket, recvBuf, BUFFER_LENGTH, 0,(SOCKADDR*)&cli,&iLen);
if (iRecv == SOCKET_ERROR)
{
printf("recvfrom()Faild;%d\n", WSAGetLastError());
break;
}
else if (iRecv == 0)
{
break;
}
else
{
printf("recvfrom():%s\n", recvBuf);
printf("accepted client ip[%s], port[%d]\n", inet_ntoa(cli.sin_addr), ntohs(cli.sin_port));
}
iSend = sendto(sSocket, sendBuf, sizeof(sendBuf), 0, (SOCKADDR*)&cli, sizeof(cli));
if (iSend == SOCKET_ERROR)
{
printf("sendto() Faild:%d\n", WSAGetLastError());
printf("----------\n");
break;
}
else if (iSend == 0)
break;
else
{
printf("sendto() succeeded\n");
printf("-=---------\n");
}
}
closesocket(sSocket);
WSACleanup();
}
client.c
#include<Winsock2.h>
#include<stdio.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSADATA wsaData;
SOCKET sClient;
struct sockaddr_in ser;
int iPort = 8888;
int iLen;
int iSend;
int iRecv;
char sendBuf[1024];
char recvBuf[1024];
memset(recvBuf, 0, sizeof(recvBuf));
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("Failed to load Winsock\n");
return;
}
ser.sin_family = AF_INET;
ser.sin_port = htons(8888);
ser.sin_addr.s_addr = inet_addr("127.0.0.1");
sClient = socket(AF_INET, SOCK_DGRAM, 0);
if (sClient == INVALID_SOCKET)
{
printf("socket() Faild %d\n", WSAGetLastError());
return;
}
iLen = sizeof(ser);
while (1) {
printf_s("请输入要发送的消息:");
gets_s(sendBuf, 1024);
iSend = sendto(sClient, sendBuf, sizeof(sendBuf), 0, (struct sockaddr*)&ser, iLen);
if (iSend == SOCKET_ERROR)
{
printf("sendto()faild %d", WSAGetLastError());
return;
}
else if (iSend = 0)
{
return;
}
else {
printf("sendto() succeeded\n");
}
iRecv = recvfrom(sClient, recvBuf, sizeof(recvBuf), 0, (struct sockaddr*)&ser, &iLen);
if (iRecv == SOCKET_ERROR)
{
printf("recvfrom() faild %d\n", WSAGetLastError());
return;
}
else if (iRecv == 0)
return;
else {
printf("recvfrom() %s", recvBuf);
printf("-----------------\n");
}
}
closesocket(sClient);
WSACleanup();
}