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 ;
 
 
}

目录
相关文章
|
12天前
|
开发框架 网络协议 Unix
【嵌入式软件工程师面经】Socket,TCP,HTTP之间的区别
【嵌入式软件工程师面经】Socket,TCP,HTTP之间的区别
18 1
|
19天前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
19 0
|
12天前
|
JSON 安全 Java
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
15 0
|
13天前
|
移动开发 Java
Java Socket编程 - 基于Socket实现HTTP下载客户端
Java Socket编程 - 基于Socket实现HTTP下载客户端
14 1
|
13天前
|
监控 网络协议 Java
Java Socket编程 - 基于TCP方式的二进制文件传输
Java Socket编程 - 基于TCP方式的二进制文件传输
17 0
|
13天前
|
网络协议 Java
Java Socket编程 - 基于TCP方式的客户服务器聊天程序
Java Socket编程 - 基于TCP方式的客户服务器聊天程序
20 0
|
13天前
|
前端开发 Java 网络安全
基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
13 0
|
17天前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
1月前
Socket编程(头脑清晰,防止过载)
Socket编程(头脑清晰,防止过载)
|
2天前
|
网络协议 Java API
【Java】Java Socket编程:建立网络连接的基础
【Java】Java Socket编程:建立网络连接的基础
10 1