开发者社区> usher.yue> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

VC面向对象的方式 写一个基于TCP的 客户端服务端程序 (SOCKET)

简介: SOCKET accept( SOCKET s, struct sockaddr FAR*addr, int FAR *addrlen);   //最后一个参数一定要赋值为 SOCKADDR结构体的长度 否则调用失败 这个MSDN的解释有     SOCKET是网络编程的接口   目...
+关注继续查看

SOCKET accept( SOCKET s, struct sockaddr FAR*addr, int FAR *addrlen);   //最后一个参数一定要赋值为 SOCKADDR结构体的长度 否则调用失败 这个MSDN的解释有

 

 

SOCKET是网络编程的接口   目前的C/S模式的开发都是基于 SOCKET 的

 

TCP服务器编写流程  :

  创建socket----------->配置SOCKADDR_IN 并调用bind()函数绑定到socket----------->监听套接字调用listen()函数--------->调用accept()函数等待连接到来并且返回用于通信的socket----------------- ->双方通信 ----------------->通信结束closesocket

 

TCP 客户端编写流程 :

创建socket----------->配置SOCKADDR_IN  (服务器端信息)------->connect连接到服务器端 ------>用本地创建的套接字进行通信  -------->通信结束 closesocket

 

 

 

1.   我这里将服务器端封装了一个 SocketSrv类   先启动服务端后启动客户端 

/*
面向对象的套接字编程 服务端  
基于TCP协议 
*/
#include <iostream>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std ;
class  SocketSrv
{
public :
 BOOL InitSocketLibrary() //初始化套接字库
 {
  WSADATA wsa ;
  if(WSAStartup(MAKEWORD(1,1),&wsa) )
   return FALSE ;
  return TRUE ;
 }
 void  CreateSocket()
 {
  m_socket=::socket(AF_INET,SOCK_STREAM,0) ;  //创建一个套接字
 }
 BOOL  Bind(int port)   //绑定端口
 {
  SOCKADDR_IN addr ;
  addr.sin_family=AF_INET ;
  addr.sin_port=htons(port);
  addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  //绑定本地网卡的任何IP   
  if(SOCKET_ERROR==::bind(m_socket,(SOCKADDR*)&addr,sizeof(SOCKADDR)))
   return FALSE ;
  return TRUE ;
 }
 void Listen()
 {
  ::listen(m_socket,5) ;  //最大连接5  监听端口
 }
    

 void  Accept()
 {  
  this->len=sizeof(SOCKADDR) ;
  tem=::accept(m_socket,(SOCKADDR*)&addr,&len) ;
 }

 ~SocketSrv()
 { 
  ::closesocket(m_socket) ;//关闭套接字
 }

 void  CloseTemSocket()
 {
  ::closesocket(tem) ;
 }

 void Recv(char *buf,int sizeofbuf)
 {
        recv(tem,buf,sizeofbuf,0) ;
 }
    void Send(char *sendbuf,int length)
 {
  send(tem,sendbuf,length,0) ;
 }
 SOCKET m_socket ;
 SOCKET tem ;
 SOCKADDR_IN addr;
 int len;
};


void main()
{
 SocketSrv sock;
 sock.InitSocketLibrary() ;
 sock.CreateSocket() ;
 sock.Bind(9999) ;
 sock.Listen() ;
 cout<<"服务器启动成功:"<<endl ;
 sock.Accept() ;
 char  buf[100] ;
 char  senddata[]="recvived data" ;
 sock.Recv(buf,100) ;
 cout<<"recv  date :"<<buf<<endl ;
 sock.Send(senddata,strlen(senddata)+1) ;
    sock.CloseTemSocket()  ;//关闭用于临时通话的 socket
}

 

 

 

2.

/*
客户端 TCP    SockerSrv 我们自己写的类来实现 网络编程
*/
#include <iostream>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std ;
void   main()
{
 
    ::WSADATA  wsa ;
 ::WSAStartup(MAKEWORD(1,1),&wsa) ;
 SOCKET s=::socket(AF_INET,SOCK_STREAM,0) ;
 SOCKADDR_IN addr ;
 addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1") ;  //将服务器地址转换为网络字节序 的ULONG类型
 addr.sin_family=AF_INET;
 addr.sin_port=htons(9999) ;  //将端口转换为网路字节序    也就是高位先存   在计算机中一般是是 低位先存
    ::connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
 char buf[]="hello !" ;
 char recvbuf[100] ;
 send(s,buf,strlen(buf)+1,0) ;
 recv(s,recvbuf,100,0) ;
 cout<<"服务器说:"<<recvbuf <<endl ;
 
 
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库必知词汇:TCP/IP协议
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
464 0
《TCP/IP协议》 - 概述
TCP/IP特点总结,协议的封层及数据进入协议栈的封装过程
1009 0
【TCP/IP】一张图带你读懂TCP/IP协议
R.T. $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).
1380 0
通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库
原文: 通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库 本文适用于:2005、2008、2008R2所有版本 为了可以通过TCP/IP协议远程访问SQLServer数据库,需要做以下几点: 在SQLServer所运行的服务器上,我们必须找到SQLServer所侦听的端口然后添加到WIndows防火墙的【允许入站】中。
1352 0
TCP/IP协议 详解
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
1873 0
了解TCP/IP协议
哈哈!9月18号要参加国家计算机三级考试,报考的是网络技术,一个是同学们说这个简单,而且,现在和电脑接触的比较多,最好了解一些关于tcp/ip协议的东西,所以就报考了。
521 0
+关注
usher.yue
算法相关技术专家
文章
问答
文章排行榜
最热
最新
相关电子书
更多
特步用Aliware进行新零售转型实践交流
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载