c/c++ 网络编程与多线程 编译参数
网络编程与多线程 编译参数
编译时要链接操作系统的pthread库
g++ -g socket01.cpp -std=c++11 -pthread
不加-pthread的话,出现下面的错误:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permit
ted
例子:
#include <sys/types.h>//socket()
#include <sys/socket.h>//socket()
#include <unistd.h>//close()
#include <arpa/inet.h>//结构体sockaddr_in
#include <string.h>//函数strstr
#include <iostream>
#include <thread>
using namespace std;
class TcpThread{
public:
void main(){
cout << "in tread main !!!!!!!!!!!!!!" << endl;
char buf[1024] = {0};
while(true){
//虽然指定了接收数据的大小为sizeof(buf) - 1,
//但实际能接收到多少,是不一定的,
//len1是实际接到的数据的大小
int len1 = recv(client, buf, sizeof(buf) - 1, 0);
cout << "recv len is : " << len1 << endl;
if(len1 <= 0) break;
buf[len1] = '\0';
if(strstr(buf, "quit") != NULL){
char re[] = "quit sucess\n";
send(client, re, strlen(re) + 1, 0);
break;
}
//给客户端发送信息,如果发送的数据大,会自动被切割车成很多小块
//分多次发出去
//虽然指定了发送数据的大小为3,
//但实际能发出去多少,是不一定的,
//sendlen是实际发送出去的数据的大小
int sendlen = send(client, "OK\n", 4, 0);
cout << "send len is : " << sendlen << endl;
cout << "recv is : " << buf << endl;
}
close(client);
delete this;
}
int client = 0;
};
int main(int argc, char* argv[]){
unsigned short port = 8080;
int sock = socket(AF_INET,SOCK_STREAM,0);
if(argc > 1){
port = atoi(argv[1]);
}
sockaddr_in saddr;
saddr.sin_family = AF_INET;
//把本地字节序,转成网络字节序
saddr.sin_port = htons(port);
saddr.sin_addr.s_addr = htonl(0);
if(bind(sock,(sockaddr*)&saddr, sizeof(saddr)) != 0){
cout << "bind failed" << endl;
return -2;
}
cout << "success:" << port << endl;
listen(sock, 10);
while(true){
sockaddr_in caddr;
socklen_t len = sizeof(caddr);
//根据原来的sock,生成一个新的socket,叫clinet
//原来的sock是专门用来建立连接的
int client = accept(sock, (sockaddr*)&caddr, &len);
if(client <= 0)break;
cout << client << endl;
char *ip = inet_ntoa(caddr.sin_addr);
//把网络字节序,转成本地字节序
unsigned short cport = ntohs(caddr.sin_port);
cout << "clinet ip is " << ip << " port is " << cport << endl;
TcpThread* th = new TcpThread();
th->client = client;
//开启多线程
std::thread sth(&TcpThread::main, th);
//让子线程脱离父线程的监管
sth.detach();
}
close(sock);
}
c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854
c/c++ 网络编程与多线程 编译参数的更多相关文章
- TCP/IP网络编程之多线程服务端的实现(二)
线程存在的问题和临界区 上一章TCP/IP网络编程之多线程服务端的实现(一)的thread4.c中,我们发现多线程对同一变量进行加减,最后的结果居然不是我们预料之内的.其实,如果多执行几次程序,会发现 ...
- 网络编程之多线程——GIL全局解释器锁
网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...
- python入门(九):网络编程和多线程
一.网络编程 Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. ...
- java 25 - 5 网络编程之多线程实现聊天室
平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现. 建立一个类: 把聊天的发送端和接收端放在同一个类,启动一个窗口 public class CharRoom ...
- Linux网络编程echo多线程服务器
echo_server服务器多线程版本 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #in ...
- 【Python网络编程】多线程聊天软件程序
课程设计的时候制作的多线程聊天软件程序 基于python3.4.3 import socket import pickle import threading import tkinter import ...
- {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习
要求: 使用多线程实现多发送方发送数据到同一个接收者 代码: 发送端:可以在多台电脑上启动发送端,同时向接收端发送数据 注意:匹配地址和端口号 package com.qf.demo; import ...
- {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
要求: 实现多个客户端发送文件给一个服务器端 提示:多个人创建客户端发送文件,服务端循环接收socket,从socket中获取文件 说明:这里我们只要建立一个服务端就可以了,然后让多台电脑使用客户端给 ...
- TCP/IP网络编程之多线程服务端的实现(一)
为什么引入线程 为了实现服务端并发处理客户端请求,我们介绍了多进程模型.select和epoll,这三种办法各有优缺点.创建(复制)进程的工作本身会给操作系统带来相当沉重的负担.而且,每个进程有独立的 ...
随机推荐
- 逆向实战干货,植物大战僵尸快速定位自动捡阳光Call,或者标志
逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...
- python属性管理(1):基础
管理属性的几种方式 在python中访问.设置.删除对象属性的时候,有以下几种方式: 使用内置函数getattr().setattr()和delattr() 自己编写getter().setter() ...
- maven创建一个简单的web项目
1.确认maven插件和配置在eclipse中已经完成 如果没完成,可参考这篇博客:http://www.cnblogs.com/mmzs/p/8191979.html 2.在eclipse中用mav ...
- iOS面试准备之思维导图
以思维导图的方式对iOS常见的面试题知识点进行梳理复习,文章xmind点这下载,文章图片太大查看不了也点这下载 你可以在公众号 五分钟学算法 获取数据结构与算法相关的内容,准备算法面试 公众号回复 g ...
- [转]Angular4 数据请求 POST、GET
本文转自:https://blog.csdn.net/dailuwen/article/details/79375980 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- .net 公共基础类
using WL.Infrastructure.Http; using System; using System.Collections.Generic; using System.IO; using ...
- JavaScript&Date对象
JavaScript Date对象 <script type="text/javascript"> var date = new Date(); document.wr ...
- 全网最贴心webpack系列教程和配套代码
webpack-demos:全网最贴心 webpack 系列教程和配套代码 欢迎关注个人技术博客:godbmw.com.每周 1 篇原创技术分享!开源教程(webpack.设计模式).面试刷题(偏前端 ...
- webpack4 系列教程(十四):Clean Plugin and Watch Mode
作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十四):Clean Plugin and Watch Mode>原文地址.更欢迎 ...
- favicon.ico在chrome里显示正常,在ie,edge浏览器中不显示
代码: <head> <meta charset="UTF-8"> <link href="imgs/favicon.ico" r ...