64,646
社区成员
发帖
与我相关
我的任务
分享
#include <winsock2.h>
#pragma comment(lib,"WS2_32.lib")
#define CLIENT_IP "127.0.0.1" // 客户端地址
#define CLIENT_PORT 5260 // 客户端端口
#include <stdio.h>
int main()
{
int iPort = CLIENT_PORT;
WSADATA wsaData;
SOCKET sRecvfrom; //sRecvfrom为服务器端套接口
int iLen; //客户地址长度
int iSend;//发送数据长度
char buf[] = "I am a server";//要发送给客户的信息
struct sockaddr_in ser,cli;//服务器和客户的地址
int cli_len = sizeof(struct sockaddr_in);
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)//判断协议栈是否正确安装
{
printf("Failed to load Winsock.\n");
return -1;
}
sRecvfrom = socket(AF_INET,SOCK_DGRAM,0);//创建服务器端套接口
if(sRecvfrom == INVALID_SOCKET)
{
printf("socket() Failed: %d\n",WSAGetLastError());
return -1;
}
//以下建立服务器端地址
//使用IP地址族
ser.sin_family = AF_INET;
//使用htons()把双字节主机序端口号转换为网络字节序端口号
ser.sin_port = htons(iPort);
//htonl()把一个四字节主机序IP地址转换为网络字节序主机地址
//使用系统指定的IP地址INADDR_ANY
ser.sin_addr.s_addr = htonl(INADDR_ANY);
//bind()函数进行套接字与地址的绑定
if(bind(sRecvfrom,(LPSOCKADDR)&ser,sizeof(ser)) == SOCKET_ERROR)
{
printf("bind() Failed: %d\n",WSAGetLastError());
return -1;
}
//初始化客户地址长度参数
iLen = sizeof(cli);
//进入一个无限循环
while(1)
{
//给连接的客户发送信息
iSend = sendto(sRecvfrom,buf,sizeof(buf),0,(struct sockaddr *)&cli, cli_len);
if(iSend == SOCKET_ERROR)
{
printf("send() Failed: %d\n",WSAGetLastError());
break;
}
else if(iSend == 0)
{
break;
}
else
{
printf("send() byte: %d\n",iSend);//发送字节数
}
closesocket(sRecvfrom);//关闭客户端套接字
}
WSACleanup();//中止了Windows Sockets在所有线程上的操作,释放资源
return 0;
}
#include <Winsock2.h>
#pragma comment(lib,"WS2_32.lib")
#include <stdio.h>
#include <stdlib.h>
#define SERVER_IP "127.0.0.1" // 服务器端IP地址
#define SERVER_PORT 5260 // 服务器端口号
#define DATA_BUFFER 1024 //默认缓冲区大小
int main()
{
WSADATA wsaData;
SOCKET sClient;
int iPort = SERVER_PORT;
int iLen;//从服务器端接收的数据长度
char buf[DATA_BUFFER];//接收数据的缓冲区
struct sockaddr_in ser;//服务器端地址
int ser_len = sizeof(struct sockaddr_in);
//判断参数输入是否正确:client [Server IP]
memset(buf,0,sizeof(buf));//接收缓冲区初始化
//判断协议栈是否正确安装
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load Winsock.\n");
return -1;
}
//填写要连接的服务器地址信息
ser.sin_family = AF_INET; // 默认
ser.sin_port = htons(iPort); // 端口号 htons是由主机字节序转换为网络字节序
//inet_addr()将命令行中输入的点分IP地址转换为二进制表示的网络字节序IP地址
ser.sin_addr.s_addr = inet_addr(SERVER_IP);
//建立客户端流式套接口
sClient = socket(AF_INET,SOCK_DGRAM,0);
if(sClient == INVALID_SOCKET)
{
printf("socket() Failed: %d\n",WSAGetLastError());
return -1;
}
{
//从服务器端接收数据
iLen = recvfrom(sClient,buf,sizeof(buf),0, (struct sockaddr *)&ser,&ser_len);
if(iLen == 0)
return -1;
else if(iLen == SOCKET_ERROR)
{
printf("recvfrom() Failed: %d\n",WSAGetLastError());
return -1;
}
else
printf("recvfrom() data from server: %s\n",buf);
}
closesocket(sClient);//关闭客户器端套接字
WSACleanup();//中止了Windows Sockets在所有线程上的操作,释放资源
return 0;
}