服务器
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment (lib,"ws2_32.lib")
//服务器端口为5050
#define DEFAULT_PORT 5050
#define BUFFER_LENGTH 1024

void main()
  {
int iPort =DEFAULT_PORT;
WSADATA wsaData;
SOCKET sSocket;
//客户地址长度
int iLen;
//发送的数据长度
int iSend;
//接收的数据长度
int iRecv;
//要发送给客户的信息
char send_buf[] = "Hello,I am a server";
//接收数据的缓冲区
char recv_buf[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(iPort);
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(recv_buf,0,sizeof(recv_buf));
while(1)
 {
iRecv = recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR *)&cli,&iLen);
if(iRecv == SOCKET_ERROR)
 {
printf("recvfrom() Failed: %d \n",WSAGetLastError());
return;
}
else if(iRecv == 0)
break;
else
 {
printf("recvfrom(): %s \n",recv_buf);
printf("Accepted client ip:[%s],port:[%d] \n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));
}
iSend = sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR *)&cli,sizeof(cli));
if(iSend == SOCKET_ERROR)
 {
printf("sendto() failed : %d",WSAGetLastError());
printf("------------------------------\n");
}
else if(iSend = 0)
break;
else
 {
printf("sendto() succeeded! \n");
printf("------------------------------\n");
}

}

closesocket(sSocket);
WSACleanup();
}
客户端
#include<Winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment (lib,"ws2_32.lib")

#define DEFAULT_PORT 5050
#define DATA_BUFFER 1024
void main(int argc,char *argv[])
  {
WSADATA wsaData;
SOCKET sClient;
int iPort = DEFAULT_PORT;
int iLen ;
int iSend;
int iRecv;
char send_buf[] = "Hello,I am a client";
char recv_buf[DATA_BUFFER] ;
struct sockaddr_in ser;

if(argc < 2)
 {
printf("Usage: client [server IP address] \n");
return;
}

memset(recv_buf,0,sizeof(recv_buf));
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
 {
printf("failed to load winsock. \n");
return;
}
ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);
ser.sin_addr.s_addr = inet_addr(argv[1]);
sClient = socket(AF_INET,SOCK_STREAM,0);
if(sClient == INVALID_SOCKET)
 {
printf("socket() failed: %d\n",WSAGetLastError());
return;
}
iLen = sizeof(ser);
iSend = sendto(sClient,send_buf,sizeof(send_buf),0,(struct sockaddr *)&ser,iLen);
if(iSend == SOCKET_ERROR )
 {
printf("sendto()Failed:%d",WSAGetLastError());
return;
}
else if(iSend ==0)
return;
else
printf("sendto() secceeded.\n");
iRecv =recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&ser,&iLen);
if(iRecv == SOCKET_ERROR)
 {
printf("recvfrom() failed:%d",WSAGetLastError());
return;
}
else if(iRecv ==0)
return;
else
 {
printf("recvfrom():%s\n",recv_buf);
printf("----------------------------\n");
}

closesocket(sClient);
WSACleanup();
}
|