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

目录
相关文章
|
6月前
|
网络协议 API
区分TCP/IP、HTTP、Socket三者的差异
HTTP关注于应用层的协议规范,而Socket关注于为应用程序提供编程中的网络功能,这些功能本身是建立在底层的TCP/IP协议之上;HTTP是更高层次的抽象,定义了如何包装数据,而TCP/IP定义了如何传送数据,Socket则是两者之间在程序中的桥梁,负责实现细节。在实际应用中,通常HTTP通信也是通过Socket来完成,因为HTTP仅是具体内容的封装形式,而Socket则是传送方式的实现形式。
588 16
|
10月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
547 10
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
738 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
704 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
882 0
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
307 0
java使用ServerSocket和Socket实现客户端与服务端通讯
java使用ServerSocket和Socket实现客户端与服务端通讯
168 0
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
434 4
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
537 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。