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

相关文章
|
5月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
229 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
5月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
266 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
5月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
245 1
|
7月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
6月前
|
网络协议 Linux
TCP 和 UDP 的 Socket 调用
【9月更文挑战第6天】
|
7月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
242 0
|
8月前
|
网络协议 Java
如何在Java中使用Socket编程实现TCP连接?
在Java中,通过Socket编程实现TCP连接非常常见。以下演示了基本的TCP通信流程,可根据具体需求进行扩展。
372 0
|
10月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
174 4
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
197 0
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
351 0
IP协议, TCP协议 和DNS 服务分别是干什么的?

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等