基于c++控制台的Socket通信源码
来源:互联网 发布:修改图片大小软件 编辑:程序博客网 时间:2024/05/18 19:18
客户端socket去连服务器和一个特定端口,连接成功后即可进行通信,发送字符串。服务器socket绑定一个端口,然后等待客户机的接入,接收到客户端发送的数据后打印。
1.客户端代码如下:
// 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;}
2.服务器代码如下:
// 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;}
(1)在创建socket之前要调用WSAStartup(MAKEWORD(1,1),&wsad);
这个函数说明使用的版本是1.1版的,wsad存储系统返回的winsocket信息。
(2)创建socket 调用socket(int af,int type,int protocol) af不清楚,type有SOCK_STREAM(tcp),SOCK_DGRAM(udp)
protocol :通信协议(默认为0)
(3)绑定端口,调用函数bind(SOCKET S,stuct sockaddr *name,int namelen),
S为监听socket,name为主机地址(里面指定了端口) ,namelen为地址变量长度。
(4)接下来使服务器处于监听状态,调用函数listen(SOCKET s,int backlog)
s为监听socket, backlog为最大连接数,最大为5.
(5)客户机连进来后就可通信了,但还要创建一个连接socket.调用accept(SOCKET S,struct sockaddr *addr int *addrlen);
s为监听socket,addr用来存放客户地址,addrlen为长度,然后返回连接socket.
这一步后就可以利用连接socket接收数据了,调用recv(SOCKET s,char *buf,int len,int flags).s为连接socket,buf来存放接收数据,他为一 个字符数组首地址。len为buf的最大长度,不是buf的实际长度,flags为此函数调用的方式。
参考---------
[1]:http://blog.sina.com.cn/s/blog_4bf793ad0100oz4w.html
0 0
- 基于c++控制台的Socket通信源码
- VC++ 基于UDP的控制台聊天程序socket通信
- 基于Windows Socket的安全通信(C++实现,附源码)
- 基于Windows Socket的安全通信(C++实现,附源码)
- 基于socket通信的c/s模式开发
- 基于Socket通信的聊天室
- 基于UDP的socket通信
- 基于android的Socket通信
- 基于TCP的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 基于android的Socket通信
- 关于iOS获取音乐库的音乐信息 (获取本地音乐文件)
- TYPE Directive in FOR XML Queries(FOR XML查询中的TYPE指令)
- Mac 下配置 Git 服务器
- 简单分析一下socket中的bind
- 打包提示"此证书的签发者无效"--系统认证证书(AppleWWDRCA.cer)过期
- 基于c++控制台的Socket通信源码
- 像QQ空间的Android沉浸式通知栏
- Java中的反射机制
- bing 地图api使用
- iOS中.pch文件如何使用
- Mac Mysql忘记密码重置备忘
- 大端模式和小端模式
- poj 3461 oulipo
- JAVA中获取工程路径的方法