发送信息
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
const short PORT = 8008;//发送信息的端口
int main()
{
WSADATA wd;
//socket初始化
int a = WSAStartup(0x0202, &wd);
//每一个socket函数都可能失败,每次都可以获取错误码
SOCKET sc = socket(AF_INET,SOCK_DGRAM,0);
if (INVALID_SOCKET == sc)
{
cout <<"Socket 套接字创建失败!"<<endl;
cout <<"错误码:"<< WSAGetLastError() <<endl;
}
//struct sockaddr *
sockaddr_in sa = {AF_INET, PORT};
//发布自己的端口,将套接字和机器上的一定的端口关联起来
int bi = bind(sc, (sockaddr*)&sa, sizeof(sa)); //sc:代表套接字, &sa:IP或端口地址
if (SOCKET_ERROR == bi)
{
cout <<"bind绑定端口失败!"<<WSAGetLastError()<<endl;
}
sockaddr_in sb = {AF_INET,8009}; <strong>//接收信息端口</strong>
sb.sin_addr.S_un.S_addr = inet_addr("192.168.0.102");//该函数将四段文字转换为一个整数,这里的IP地址可以换成自己的
//向某一个端口发送数据
char s[256];
while (true)
{
printf("输入要发送的内容!\n");
//cin >> s; //这里cin会将输入的空格过滤掉
<span style="white-space:pre"> </span>gets(s); //使用gets()函数则不会出现这种问题
sendto(sc, s, strlen(s), 0, (sockaddr*)&sb, sizeof(sb));
}
return 0;
}
接收信息
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
const short PORT = 8009;//接收信息的端口
int main()
{
WSADATA wd;
//socket初始化
int a = WSAStartup(0x0202, &wd);
//每一个socket函数都可能失败,每次都可以获取错误码
SOCKET sc = socket(AF_INET,SOCK_DGRAM,0);
if (INVALID_SOCKET == sc)
{
cout <<"Socket 套接字创建失败!"<<endl;
cout <<"错误码:"<< WSAGetLastError() <<endl;
}
//struct sockaddr *
sockaddr_in sa = {AF_INET, PORT};
//发布自己的端口,将套接字和机器上的一定的端口关联起来
int bi = bind(sc, (sockaddr*)&sa, sizeof(sa)); //sc:代表套接字, &sa:IP或端口地址
if (SOCKET_ERROR == bi)
{
cout<< "bind绑定端口失败!" << WSAGetLastError() <<endl;
}
int n;
char s[256];
while (true)
{
n = recv(sc, s, sizeof(s), 0);
s[n] = '\0';
printf("接收数据为:%s\n", s);
}
return 0;
}
测试结果:
本文详细介绍了使用WinSock2库实现TCP/IP协议下发送和接收信息的过程,包括socket初始化、绑定端口、发送与接收数据的基本步骤。
8239

被折叠的 条评论
为什么被折叠?



