win32控制台版

获取本机IP:

cmd:       ipconfig/all

我写的是一个服务器和客户端点对点的信息传递(实现相互的可以适当更改代码):

服务器发送给客户端的是一个结构体数据

typedef struct Date {
float m1;
float m2;
float m3;
float m_roll;
float m_pitch;
float m_rotate;
}Datablock;

上服务器代码(阻塞式的):

#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;
typedef struct Date {
float m1;
float m2;
float m3;
float m_roll;
float m_pitch;
float m_rotate;
}Datablock;
int main()
{ cout << "服务器启动!....." << endl;
//初始化winsock
WSADATA wsaD;
WSAStartup(MAKEWORD(, ), &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(); //指定端口
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, (struct sockaddr*)&c_addr, &addr_len); //通过监听套接字创建连接套接字 cout << "连接已建立......" << endl; char buf[];
while (true) {
Datablock client_send; cout << "输入(start)开始更改,输入(end)结束服务:" << endl;
cout << "输入发送内容:";
while (cin.getline(buf, ))
{ string rcover = buf;
if (rcover == "end")break;
if (rcover == "start") {
cout << "请以m1-m2-m3-m_roll-m_pitch-m_rotate格式输入数据:" << endl;
char transmit[];
cin.getline(transmit, );
send(sconnect, transmit, strlen(transmit) + , ); //字符串还有个结束标志
memset(transmit, , sizeof(transmit)); } }
return ;
}

客户端:(非阻塞式的)

首先要有宏(一般放在.h文件的头文件区域)

#include "stdafx.h"
#include <iostream>
#include <string>
#include<cstring>
#include <winsock2.h>
#include <WS2tcpip.h>
#include<vector>
#include<sstream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
typedef struct Date {
float m1;
float m2;
float m3;
float m_roll;
float m_pitch;
float m_rotate;
}Datablock;
void splitEx(vector<string>&strs, const string& src, string separate_character)
{ int separate_characterLen = separate_character.size();//分割字符串的长度,这样就可以支持如“,,”多字符串的分隔符
int lastPosition = , index = -;
while (- != (index = src.find(separate_character, lastPosition)))
{
strs.push_back(src.substr(lastPosition, index - lastPosition));
lastPosition = index + separate_characterLen;
}
string lastString = src.substr(lastPosition);//截取最后一个分隔符后的内容
if (!lastString.empty())
strs.push_back(lastString);//如果最后一个分隔符后还有内容就入队 }
float str_float(string a) {
float b;
stringstream ss; //string 转 int
ss << a;
ss >> b;
return b;
}
int main()
{
cout << "客户端启动" << endl;
//初始化winsock
WSADATA wsaD;
WSAStartup(MAKEWORD(, ), &wsaD);
//创建客户端socket
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//连接服务器
u_long iMode = ;//如果设置为0,为阻塞式的
ioctlsocket(sclient, FIONBIO, &iMode);
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET; cout << "请输入局域网IP地址:" << endl;
string ipaddress;
cin >> ipaddress; cout << ipaddress; servaddr.sin_addr.s_addr = inet_addr(ipaddress.c_str()); //指定服务器
servaddr.sin_port = htons(); //指定端口
cout << endl<<"OK" << endl; connect(sclient, (struct sockaddr*)&servaddr, sizeof(servaddr)); //通过套接字连接主机 char buf[]; Datablock resu_data;
while (true) {
//存储接收的字符
int len = recv(sclient, buf, sizeof(buf), ); //通过连接套接字接收数据 if (len > )
{
vector<string>result;
cout << "客户说:" << buf << endl;
string test = buf;
cout << test << endl;
splitEx(result, test, "-");
resu_data.m1 = str_float(result[]);
resu_data.m2 = str_float(result[]);
resu_data.m3 = str_float(result[]);
resu_data.m_roll = str_float(result[]);
resu_data.m_pitch = str_float(result[]);
resu_data.m_rotate = str_float(result[]);
cout << resu_data.m1 << endl;
cout << resu_data.m2 << endl;
cout << resu_data.m3 << endl;
cout << resu_data.m_roll << endl;
cout << resu_data.m_pitch<< endl;
cout << resu_data.m_rotate << endl;
}
} return ;
}

这是一个点对点的,先开server,后开客户端。

C++Socket通信(客户端和服务器)的更多相关文章

  1. C语言Socket-单工通信(客户端向服务器发送数据)

    服务端(server) #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.li ...

  2. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

  3. Socket通信客户端和服务端代码

    这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...

  4. Java 使用 Socket 实现客户端和服务器的信息交互

    服务器 public class Server{ private ServerSocket serverSocket; private Socket socket; private BufferedR ...

  5. C#应用视频教程1.2 Socket通信客户端实现

    接下来我们尝试实现最简单的Socket客户端,为了确保只可能你的代码有问题,服务器要先用别人成熟的代码测试(这也是编程的一个技巧,先不要用自己写的客户端测试自己写的服务器,这样出了问题你也不知道谁有问 ...

  6. socket | tcp客户端 tcp服务器 udp客户端 udp 服务器 创建方法

    tcp服务器 #coding=utf-8 ''' 这里是tcp服务器端,要先启动 ''' import socket import threading bind_ip = "0.0.0.0& ...

  7. Socket TCP客户端和服务器的实现

    import java.io.*; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.S ...

  8. C#应用视频教程1.3 Socket通信客户端完善

    我们先把前面的代码封装成一个完整的类,因为跟网络相关的方法并不一定是建立socket的服务器和客户端,所以还是应该把两个分开,比如获取本机IP,修改本机IP,PING远程主机这些事情应该放在一个单独的 ...

  9. Socket通信客户端设计(Java)

    public class Client extends JFrame implements Runnable{ private JPanel jPanel= new JPanel(); private ...

  10. Socket通信-客户端

    WSADATA wsd; SOCKET sHost; SOCKADDR_IN servAddr; if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) retu ...

随机推荐

  1. git rebase 与git merge 小结

    git merge是用来合并两个分支的. $ git merge b   将b分支合并到当前分支 同样  $ git rebase b ,也是把 b分支合并到当前分支 ---------------- ...

  2. Linux centos7iptables filter表案例、iptables nat表应用

    一.iptables filter表案例 vim /usr/local/sbin/iptables.sh 加入如下内容 #! /bin/bash ipt="/usr/sbin/iptable ...

  3. Unsafe作用

  4. Controller生命周期

    1. 实例化 alloc/init, initWithNibName 2.awakeFromNib 从nib创建Controller对象 3.get/set outlets 4. viewDidLoa ...

  5. 一 SSH整合:Spring整合Struts2的两种方式,struts.xml管理Action&Bean管理Action

    SSH回顾 1 引入jar包 Struts2的jar包 D:\Struts2\struts-2.3.35\apps\struts2-blank\WEB-INF\lib  开发基本包 Struts2有一 ...

  6. Mybatis入门(四)配置别名(二)

    这一章我们练习一下Mybatis的别名,这大大的提高了我们的开发效率 类型别名(typeAliases) 类型别名是为 Java 类型设置一个短的名字. 它只和 XML 配置有关,作用在于用来减少类完 ...

  7. Git如何合并Commit

    如果你在 push 你的修改之前想要将本地多次修改后的 commit 合并一下变得更好看,可以使用下面的方法. 指定你要合并的 commit 相关的命令有两种 你可以通过指定修改过去的几个 commi ...

  8. centos 搭建 git 服务端和客户端

    centos 搭建git需要设置远程服务端和客户端.远程代码存放在服务端,多个客户端可以共享和维护服务端代码. 一.服务端主机 1.创建ssh,大部分默认已经安装,有ssh就跳过 yum instal ...

  9. texlive 安装

    texlive 可以从下面两个网址下载 https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/ https://mirror ...

  10. Jenkins + git + maven 安装

    1.jenkins安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo ...