C++ TCP winsock 多线程编程的代码

将写代码过程中经常用到的一些代码段珍藏起来,下边资料是关于C++ TCP winsock 多线程编程的代码,希望能对各位也有好处。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
using namespace std;

#define PORT 4000
#define IP_ADDRESS "127.0.0.1"

DWORD WINAPI ClientThread (LPVOID ipParameter)
{
SOCKET ClientScoket = (SOCKET)ipParameter;
int RET = 0;
char RecvBuffer[MAX_PATH];
while(true){
memset(RecvBuffer,0x00,sizeof(RecvBuffer));
RET = recv(ClientScoket,RecvBuffer,MAX_PATH,0);
if(RET == 0||RET == SOCKET_ERROR)
{
cout<<"failed,exit"<<endl;
break;
}
cout<<"接受的消息为"<<RecvBuffer<<endl;
}

return 0;   

}
int main(void)
{
WSADATA WSA;
SOCKET severScoket,clientScoket;
struct sockaddr_in LocalAddr,clientAddr;
int AddrLen = 0;
HANDLE hThread = NULL;
int RET = 0;
if (WSAStartup(MAKEWORD(2,2),&WSA)!= 0 )
{
cout<<"init failed"<<endl;
return -1;
}
severScoket = socket(AF_INET,SOCK_STREAM,0);
if(severScoket == INVALID_SOCKET)
{
cout<<"creat failed"<<GetLastError()<<endl;
return -1;
}
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
LocalAddr.sin_port = htons(PORT);
memset(LocalAddr.sin_zero,0x00,8);
if (RET != 0)
{
cout<<"bind failed";
return -1;
}
RET = listen(severScoket,5);
if (RET!= 0)
{
cout<<"listen failed";
return -1;
}
cout<<"服务器已启动"<<endl;
while(true)
{
AddrLen = sizeof(clientAddr);
if (clientScoket ==INVALID_SOCKET)
{
cout<<"accept failed";
break;
}
cout<<"客户端连接"<<inet_ntoa(clientAddr.sin_addr)<<"."<<clientAddr.sin_port<<endl;
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)clientScoket,0,NULL);
if(hThread == NULL)
{
cout<<"creat thread failed"<<endl;
break;
}
CloseHandle(hThread);
}
closesocket(severScoket);
closesocket(clientScoket);
WSACleanup();
return 0;
}

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
using namespace std;

#define PORT 4000
#define IP_ADDRESS "127.0.0.1"
int main(void)
{
WSADATA WSA;
SOCKET clientScoket;
struct sockaddr_in serveAddr;
int AddrLen = 0;
HANDLE hThread = NULL;
int RET = 0;
char SendBuffer[MAX_PATH];
if (WSAStartup(MAKEWORD(2,2),&WSA)!= 0 )
{
cout<<"init failed"<<endl;
return -1;
}
clientScoket = socket(AF_INET,SOCK_STREAM,0);
if(clientScoket == INVALID_SOCKET)
{
cout<<"creat failed"<<GetLastError()<<endl;
return -1;
}
serveAddr.sin_family = AF_INET;
serveAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
serveAddr.sin_port = htons(PORT);
memset(serveAddr.sin_zero,0x00,8);

if (RET != 0)
{
    cout<<"connect failed";
    return -1;
}
else{ cout<<"链接成攻"<<endl;}
while(true)
{
    cin.getline(SendBuffer,sizeof(SendBuffer));
    RET = send(clientScoket,SendBuffer,(int)strlen(SendBuffer),0);
    if (RET == SOCKET_ERROR)
    {
        cout<<"send to error"<<endl;
        break;
    }
}
closesocket(clientScoket);
WSACleanup();
return 0;

}

原文地址:https://blog.51cto.com/14122754/2382428

时间: 2024-08-10 01:12:09

C++ TCP winsock 多线程编程的代码的相关文章

linux-socket tcp客户端服务器编程模型及代码详解

上一篇文章介绍了 TCP/IP相关协议,socket通信流程和涉及到的各种函数: Socket简单理解 本篇将具体解释tcp客户端服务器编程模型相关的代码 文章分为4个部分: 1. TCP客户端服务器编程模型流程图 2. 网络字节序与主机字节序 3. TCP编程的地址结构 4. 详细案例代码及解释 一: TCP客户端服务器编程模型流程图 上面两张图片将整个流程已经说明的很清楚了; 二: 网络字节序与主机字节序 字节序即是保存数据的方向方式, 分为 大端存储 和 小端存储; 其中 网络字节序 使用

[代码仓库]Python3多线程编程

首先导入模块 import threading from queue import Queue threading是线程模块,queue是系统提供的线程间通信队列,其中Queue为先进先出队列 thread1 = threading.Thread(target = target_function ,daemon = True)#target中是目标函数名,daemon为设置守护线程,true为守护线程,false为非守护.当父线程退出时,需要等待非守护线程结束,守护线程则跟随父线程退出 thre

Delphi Socket通信及多线程编程总结

http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstractSocket.TClientSocket.TClientWinSocket.TCustomSocket.TCustomWinSocket.TCustomServerSocket .TServerClientThread.TServerWinSocket.  TServerClientWinSoc

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

《TCP/IP网络编程》

<TCP/IP网络编程> 基本信息 作者: (韩)尹圣雨 译者: 金国哲 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115358851 上架时间:2014-6-19 出版日期:2014 年6月 开本:16开 页码:1 版次:1-1 所属分类:计算机 > 计算机网络 > 网络协议 > TCP/IP 更多关于>>><TCP/IP网络编程> 编辑推荐 为初学者准备的网络编程 本书涵盖操作系统.系统编程.TCP/IP协议等多种

多线程编程1

参考资料: http://blog.csdn.net/JXH_123/article/details/23450031                             秒杀多线程系列 http://www.baidu.com/index.php?tn=utf8kb_oem_dg&addresssearch=1#wd=C%2B%2B%E5%BE%AA%E7%8E%AF%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97&ie=utf-8&tn=utf8kb

Android开发实践:多线程编程小结

我们知道,Android系统为了提高程序的实时响应能力,不允许在UI线程中进行耗时的操作,否则会出现ANR异常,因此必须将耗时的任务放到非UI线程中执行.Android/Java提供了很多类来帮助大家完成异步操作,比如:Thread类,Timer类,AsyncTask类,HandlerThread类,以及Executor接口.这些类都分别在什么场合下使用呢? 本文简单地总结一下Android开发中常见的多线程类型和解决方案,并比较和分析了各个方案的区别,以便更好地理解和应用这些API接口. 1.

pthread多线程编程的学习小结

pthread多线程编程的学习小结 程序员必上的开发者服务平台 —— DevStore pthread多线程编程整理 1 Introduction 不用介绍了吧… 2 Thread Concepts 1.     Thread由下面部分组成: a.     Thread ID b.     Stack c.     Policy d.     Signal mask e.     Errno f.      Thread-Specific Data 3 Thread Identification

Winsock网络编程笔记(3)----基于UDP的server和client

在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此,这一篇随笔也简单的列举基于UDP的Server和Client的实现.. 和基于TCP的实现相比,其主要的不同点包括: ①接收端(简单地说就是服务器)/发送端(简单地说就是客户端)在创建Socket时候,参数要选择SOCK_DGRAM, IPPROTO_UDP: ②接收端不需要调用listen和ac