Tags: C++, Windows Socket
客户端socket去连服务器和一个特定端口,连接成功后即可进行通信,发送字符串。服务器socket绑定一个端口,然后等待客户机的接入,接收到客户端发送的数据后打印。
// Demo2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"客户端启动"<<endl;
//初始化winsock
WSADATA wsaD;
WSAStartup(MAKEWORD(1, 1), &wsaD);
//创建客户端socket
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//连接服务器
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //指定服务器
servaddr.sin_port = htons(8080); //指定端口
cout<<"确实要建立连接? yes/no"<<endl;
char flag[4];
gets_s(flag);
if(strcmp(flag, "yes") == 0)
{
connect(sclient, (struct sockaddr*)&servaddr, sizeof(servaddr)); //通过套接字连接主机
}
//发送数据
char buf[500];
cout<<"输入发送内容:";
while(cin.getline(buf, 500))
{
//通过套接字给主机发送字符串
send(sclient, buf, strlen(buf) + 1, 0); //字符串还有个结束标志,
}
return 0;
}
// Demo3.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using std::cout;
using std::cin;
using std::string;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"服务器启动!....."<<endl;
//初始化winsock
WSADATA wsaD;
WSAStartup(MAKEWORD(1, 1), &wsaD);
//创建监听套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 绑定主机地址和监听套接字
struct sockaddr_in my_addr; //主机地址
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(8080); //指定端口
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(slisten, (struct sockaddr *)&my_addr, sizeof(my_addr));
//启动监听
listen(slisten,5);
//开始接收数据
//struct sockaddr_in c_addr; //客户地址
//int addr_len = sizeof(c_addr);
SOCKET sconnect = accept(slisten, NULL, NULL);//(struct sockaddr*)&c_addr, &addr_len); //通过监听套接字创建连接套接字
cout<<"连接已建立......"<<endl;
while(true)
{
char buf[500]; //存储接收的字符
int len = recv(sconnect, buf, sizeof(buf), 0); //通过连接套接字接收数据
if(len > 0)
{
cout<<"客户说:"<<buf<<endl;
}
}
return 0;
}
这一步后就可以利用连接socket接收数据了,调用recv(SOCKET s,char *buf,int len,int flags).s为连接socket,buf来存放接收数据,他为一 个字符数组首地址。len为buf的最大长度,不是buf的实际长度,flags为此函数调用的方式。