基于TCP的通信 客户端
2015-06-03 00:12
393 查看
#include <WINSOCK2.H> #include <stdio.h> // socket 套接字 #pragma comment (lib,"Ws2_32") //library DWORD WINAPI ThreadInput(LPVOID lpParam); DWORD WINAPI ThreadOutput(LPVOID lpParam); SOCKET sClient; void main() { //first 初始化DLL WSADATA wsadata; if (WSAStartup(MAKEWORD(2,2),&wsadata)!=0) { printf("Init Error\n"); return ; } //second 创建套接字 sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sClient == INVALID_SOCKET) { printf("Create Listen Is Error\n"); return; } sockaddr_in LocalAddr; LocalAddr.sin_family = AF_INET; LocalAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //127.0.0.1 LocalAddr.sin_port = htons(8888); if (connect(sClient,(sockaddr*)&LocalAddr,sizeof(LocalAddr))==SOCKET_ERROR) { // WSAENETDOWN int a = GetLastError(); closesocket(sClient); printf("Connect Is Error\n"); return; } HANDLE hThread[2]; //这里是整个程序的核心部分我们一定要那个管道图 hThread[0] = CreateThread(NULL,0,ThreadOutput,NULL,0,NULL); hThread[1] = CreateThread(NULL,0,ThreadInput,NULL,0,NULL); WaitForMultipleObjects(2,hThread,TRUE,INFINITE); } DWORD WINAPI ThreadInput(LPVOID lpParam) { SOCKET s = sClient; //该线程函数是从套接字中获取信息并且通过管道注入cmd的工作函数 char Buffer[4096] = {0}; DWORD dWrite = 0; DWORD dwRecvd = 0; while (TRUE) { scanf("%s",Buffer); send(s,Buffer,strlen(Buffer),0); } return 0; } DWORD WINAPI ThreadOutput(LPVOID lpParam) { SOCKET s = sClient; //该线程函数是从被控端返给控端信息的线程函数 char Buffer[4096]={0}; while (TRUE) { int Ret = recv(s,Buffer,4096,0); if(Ret<0) { break; } Buffer[Ret]='\0'; printf("%s",Buffer); } return 0; }
相关文章推荐
- [Android]浅析Http框架 - Android-Async-http
- http服务(一)――apache工作模式
- HTTP协议详解
- 阿里欲瓜分网络文学蛋糕还来得及吗?
- Centos 6.6 x86_64 Basic Server 快速安装httpd
- 所谓的HTTP请求,到底都干了什么
- tcp 粘包
- http协议详解
- 获取xmlhttpQequest对象
- Android学习 - 网络编程的理解
- linux网络编程之二TCP套接口编程
- Java TCP网络编程 简单实例
- SQL数据库— <3>高级查询、常用函数 --摘录网络
- android5.0网络之策略路由
- java.lang.ClassNotFoundException: org.apache.http.util.Args
- nginx强制使用https访问(http跳转到https)
- 第8章双路由双网段网络互通实验(初级篇)
- linux网络编程学习之一网络字节序
- HttpClient基础
- Java UDP网络编程 简单实例