基于vc6.0發送單接收自回環
/****************服務器************/
#include<winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment (lib,"ws2_32.lib")
#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;
WSAStartup(MAKEWORD(1,1),&wsaData) ;////加載socket庫
sSocket = socket(AF_INET,SOCK_DGRAM,0);///創建socket
ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);//端口號
ser.sin_addr.s_addr = htonl(INADDR_LOOPBACK);//(INADDR_ANY);////從固定的網卡綁定ip地址
int nbind = bind(sSocket,(SOCKADDR *)&ser,sizeof(SOCKADDR)); ///綁定要偵聽的地址
if (SOCKET_ERROR==nbind)
{
closesocket(sSocket);
}
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));////將一個IP轉換成一個互聯網標準點分格式的字符串將一個無符號短整形數從網絡字節順序轉換為主機字節順序
}
}
closesocket(sSocket);
WSACleanup();
}
/**********客戶端************/
#include<winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment (lib,"ws2_32.lib")
#define DEFAULT_PORT 5050
#define BUFFER_LENGTH 1024
void main()
{
int iPort =DEFAULT_PORT;
WSADATA wsaData;
SOCKET sSocket;
//客戶地址長度
int iLen,nbind;
//發送的數據長度
int iSend;
//接收的數據長度
int iRecv;
//要發送給客戶的信息
char send_buf[] = "Hello,I am a server";
//接收數據的緩沖區
char recv_buf[BUFFER_LENGTH] ;
//本地地址和客戶地址
struct sockaddr_in ser;
WSAStartup(MAKEWORD(1,1),&wsaData);
sSocket = socket(AF_INET,SOCK_DGRAM,0);
ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);//端口號
ser.sin_addr.s_addr = htonl(INADDR_LOOPBACK);//(INADDR_ANY);////從固定的網卡綁定ip地址
while(1)
{
iSend = sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR *)&ser,sizeof(ser));
if(iSend = 0)
break;
else
{
printf("sendto() succeeded! \n");
printf("------------------------------\n");
}
}
closesocket(sSocket);
WSACleanup();
}
|