Server................
// Server.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include "zlib.h"
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"ZLib.lib")
#define PORT 4000
#define LOCAL_HOST "192.168.1.100" DWORD WINAPI createproc(LPVOID lpParment)
{
SOCKET server = (SOCKET)lpParment;
char recvbuf[MAX_PATH] = {};
char sendbuf[MAX_PATH] = {};
int err= ; while (true)
{
unsigned long recvLen=sizeof(recvbuf),recLen=sizeof(recvbuf),stLen=sizeof(recvbuf);
char unresvbuf[MAX_PATH] = {};
// memset(recvbuf,0x00,sizeof(recvbuf));
err = recv(server,recvbuf,MAX_PATH,); uncompress((BYTE*)unresvbuf,&recLen,(BYTE*)recvbuf,stLen); if (err == SOCKET_ERROR)
{
printf("Recv msg error\r\n");
break;
}else
{
printf("Recv msg :%s\r\n",unresvbuf);
} char com[MAX_PATH] = {};
char strDst[]={};
memset(sendbuf,0x00,sizeof(sendbuf));
gets(sendbuf);
unsigned long srcLen=sizeof(sendbuf),bufLen=sizeof(sendbuf),dstLen=sizeof(sendbuf); compress((BYTE*)com,&bufLen,(BYTE*)sendbuf,srcLen);
// printf("压缩长度:%d\r\n 压缩以后的内容:%s\r\n==============\r\n",bufLen,com); // uncompress((BYTE*)strDst,&dstLen,(BYTE*)com,bufLen);
// printf("解压缩长度:%d\r\n解压缩以后的长度:%s\r\n",dstLen,strDst); err = send(server,com,(int)strlen(com),);
if (err == SOCKET_ERROR)
{
printf("Send msg error\r\n");
//return -1;
break;
}else
{
printf("Send Msg:%s\r\n",sendbuf);
}
}
return ;
} int main(int argc, _TCHAR* argv[])
{
WSADATA wsadata;
SOCKET Serversocket,Clientsocket;
struct sockaddr_in LocalAddr,clientaddr;
HANDLE hThread;
int err = ;
if (WSAStartup(MAKEWORD(,),&wsadata) != )
{
printf("Wsa init error\r\n");
return -;
}
Serversocket = socket(AF_INET,SOCK_STREAM,);
if (Serversocket == INVALID_SOCKET)
{
printf("Serversocket Error\r\n");
return -;
}
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_port = htons(PORT);
LocalAddr .sin_addr.S_un.S_addr = inet_addr(LOCAL_HOST);
memset(LocalAddr.sin_zero,0x00,); err = bind(Serversocket,(struct sockaddr*)&LocalAddr,sizeof(LocalAddr));
if (err != )
{
printf("Bind Port error\r\n");
return -;
} err = listen(Serversocket,);
if (err != )
{
printf("Listen error\r\n");
return -;
} while (true)
{
/*
char com[MAX_PATH] = {0};
char xxoo[MAX_PATH] = "Nimagebi...caonima"; unsigned long srcLen=sizeof(xxoo),bufLen=sizeof(xxoo),dstLen=sizeof(xxoo);
char strDst[1024]={0};
compress((BYTE*)com,&bufLen,(BYTE*)xxoo,srcLen);
printf("/nAfter Compressed Length:%d\r\nCompressed String:%s\r\n==============\r\n",bufLen,com); uncompress((BYTE*)strDst,&dstLen,(BYTE*)com,bufLen);
printf("/nAfter UnCompressed Length:%d\r\nUnCompressed String:%s\r\n",dstLen,strDst);
*/
int addrlen = sizeof(clientaddr);
Clientsocket = accept(Serversocket,(struct sockaddr*)&clientaddr,&addrlen);
if (Clientsocket == INVALID_SOCKET)
{
printf("Clientsocket Error\r\n");
//return -1;
break;
} printf("Have client connect herf:%s ---> %d\r\n",inet_ntoa(clientaddr.sin_addr),clientaddr.sin_port); hThread = CreateThread(NULL,,createproc,(LPVOID)Clientsocket,,NULL); //新建立线程,如果不简历,相互通信几句就卡死了。奇怪。 if (hThread == NULL)
{
printf("New Create thread error\r\n");
break;
}else
{
printf("New create Thread susccess\r\rn");
}
CloseHandle(hThread); }
closesocket(Clientsocket);
closesocket(Serversocket);
WSACleanup();
return ;
}

Client

// Client.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include "zlib.h"
#include<winsock2.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"Zlib.lib")
#define PORT 4000
#define Local_host "192.168.1.100" int main(int argc,char** argv)
{
WSADATA wsadata;
SOCKET localsocket;
sockaddr_in localaddr;
char sendbuf[MAX_PATH] = {};
char recvbuf[MAX_PATH] = {};
int locallen = ;
int ret = ; if (WSAStartup(MAKEWORD(,),&wsadata) != )
{
printf("wSA STARTinit error\r\n");
return -;
}
localsocket = socket(AF_INET,SOCK_STREAM,);
if (localsocket == INVALID_SOCKET)
{
printf("localsocket error\r\b");
return -;
} localaddr.sin_addr.s_addr = inet_addr(Local_host);
localaddr.sin_port = htons(PORT);
localaddr.sin_family = AF_INET; ret = connect(localsocket,(sockaddr*)&localaddr,sizeof(localaddr));
if (ret == SOCKET_ERROR)
{
printf("Connect error\r\n");
return -;
} while (true)
{
memset(sendbuf,,sizeof(sendbuf));
memset(recvbuf,,sizeof(recvbuf));
char sendres[MAX_PATH] = {};
char unsendres[MAX_PATH] = {};
unsigned long SendLen=sizeof(sendbuf),sufLen=sizeof(sendbuf),stLen=sizeof(sendbuf); gets(sendbuf); compress((BYTE*)sendres,&sufLen,(BYTE*)sendbuf,stLen);
// uncompress((BYTE*)unsendres,&stLen,(BYTE*)sendres,SendLen);
// printf("解压缩以后的内容:%s",unsendres);
ret = send(localsocket,sendres,(int)strlen(sendres),);
if (ret == INVALID_SOCKET)
{
printf("Ret send msg error\r\n");
break;
} char com[MAX_PATH] = {};
char strDst[MAX_PATH]={};
ret = recv(localsocket,recvbuf,MAX_PATH,);
unsigned long srcLen=sizeof(recvbuf),bufLen=sizeof(recvbuf),dstLen=sizeof(recvbuf);
uncompress(( BYTE*)com,&dstLen,( BYTE*)recvbuf,bufLen); if (ret == INVALID_SOCKET)
{
printf("Recv msg error\r\n");
break; }else
{
//printf("Recv buf is :%s\r\n",recvbuf);
printf("Recv msg susscess :%s\r\n",com);
} }
closesocket(localsocket);
WSACleanup();
return ;
}

VC SOCKET 压缩通信学习的更多相关文章

  1. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  2. Dubbo底层采用Socket进行通信详解

    由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下. n  通信理论 计算机与外界的信息交换称为通信.基本的通信方法有并行通信和串行通信两种. 1 ...

  3. 使用Socket进行通信

    客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器. Socket(lnetAddress/String  remoteAddress , int  port ...

  4. java socket报文通信(一)socket的建立

    java socket报文通信(一) socket的建立  今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Contro ...

  5. java socket线程通信

    关于socket线程通信的一些知识整理 一般我们需要要让两台机子进行通信,需要创建一个Server 类,一个Client类,还需要创建一个线程类 server public class Server ...

  6. C# 通信学习笔记

    C# 通信学习笔记 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不 ...

  7. 《java入门第一季》之Socket编程通信和TCP协议通信图解

    Socket编程通信图解原理: TCP协议通信图解

  8. socket 编程通信实例

    socket 编程通信实例:TCPserver: , ServerThread,  ;    WSADATA wsaData;    ,),  ;    }    ;    }    } ;    g ...

  9. Socket通讯简易学习

    Socket打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进行读写——处理完毕,关闭专用链接——关闭通信通道(当然其中监听到关闭专用链接可以重复 ...

随机推荐

  1. hdu1174(3维射线与圆是否相交)

    简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...

  2. Web开发之容器

    Web开发之容器 主题 Servlet容器.Web容器.应用服务器 参考资料   Servlet容器.Web容器.应用服务器         Servlet容器的主要任务是管理Servlet的生命周期 ...

  3. margin 依附与可见的内容,不能为margin而写margin

    margin  依附于可见的内容,不能为margin而写margin <!DOCTYPE html><html><head><style> p{marg ...

  4. python字符串拼接相关

    #字符串拼接#str.join(元组.列表.字典.字符串) 之后生成的只能是字符串.str = "-";seq = ("a", "b", & ...

  5. Qt里的原子操作QAtomicInteger

    所谓原子操作,即一系列复杂的操作能一气呵成,中间不被其他的操作打断.这在多线程程序中尤其常见,但要实现这种功能,既要考虑程序的良好设计,又要关心特定平台的体系结构和相关编译器对原子特性的支持程度.所以 ...

  6. PHP查看目录下的所有文件

    [1].[代码] [PHP]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  7. 安装VS2013 2015 需要IE10浏览器 跳过的方法

    安装VS2013 如果浏览器版本较旧的话会提示要求你更新到IE10版本,很麻烦,那么我们如何跳过呢? 复制下面代码粘贴到文本文档里,修改文本txt后缀为bat,右键管理员运行. @ECHO OFF   ...

  8. 涉及到复制和二进制日志中的选项和变量-Replication and Binary Logging Options and Variables

    在搭建复制中,有些参数需要我们留意,在这里罗列出来,供大家参考一下,以GTID为基础 --server-id server-id:这是一个全局的可动态调整的变量,取值范围为0-4294967295,也 ...

  9. 006-重装yum

    报错情况: There was a problem importing one of the Python modulesrequired to run yum. The error leading ...

  10. F110 参数保存和重新运行录屏

    **初始界面回车 PERFORM frm_dynpro USING ' 'X'. PERFORM frm_dynpro USING '' 'BDC_CURSOR' 'F110V-LAUFD'. PER ...