//main.cpp
1 #include "j_socket.h"
#include <stdio.h>
#include <pthread.h>
static int port=;
j_server* ser;
void* main_listen( void* args)
{
ser=new j_server(port);
ser->j_listen();
}
int main()
{
static pthread_t listen_p;
int ret;
ret= pthread_create( &listen_p, NULL, main_listen, NULL ); //参数:创建的线程id,线程参数,线程运行函数的起始地址,运行函数的参数
if( ret != ) //创建线程成功返回0
{
printf("pthread_create error:error_code=%d\n",ret );
}
static j_client* cli;
cli =new j_client("127.0.0.1",port);
cli->j_send();
return ;
}
//j_socket.h
1 #ifndef J_SOCKET_H_INCLUDED
#define J_SOCKET_H_INCLUDED
#include <stdio.h>
#include <errno.h>
#include <winsock2.h>
#include <pthread.h> #define INIT_ERROR 1
#define BIND_ERROR 2
#define LISTEN_ERROR 3
struct rec_args{
int * l;
SOCKET* s;
};
void* receive( void* args)
{
char recvBuf[];
rec_args *a=(rec_args*)args;
while(true)
{
recv(*(a->s),recvBuf,,);
printf("receive message: %s\n",recvBuf);
printf("111111\n");
if(strcmp(recvBuf,"end")==){break;} }
closesocket(*(a->s));
(*(a->l))--;
printf("22222\n");
return NULL;
}
class j_server
{
private:
SOCKET Server_Sock;
SOCKADDR_IN server_addr;
SOCKADDR_IN client_addr; int max_num;
int link_num=;
int error_num; public:
j_server(int port)
{
WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(,),&wsa) != )
{
error_num=INIT_ERROR;
return;
} if((Server_Sock = socket(AF_INET, SOCK_STREAM, ))==-)
{
error_num=INIT_ERROR;
return;
}
ZeroMemory((char *)&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port); /*本地监听端口*/
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/ if(bind(Server_Sock,(struct sockaddr *)&server_addr,sizeof(server_addr))==-)
{
error_num=BIND_ERROR;
return;
}
if(listen(Server_Sock,)==-) //其中第二个参数代表能够接收的最多的连接数
{
error_num=LISTEN_ERROR;
return;
}
max_num=; }
int j_listen()
{
int len=sizeof(SOCKADDR);
while(true)
{
if(link_num>max_num)
{
Sleep();
continue;
}
SOCKET Command_Sock = accept(Server_Sock, (SOCKADDR*)&client_addr,&len);
if(Command_Sock == INVALID_SOCKET)
{
printf("accept error !");
closesocket(Command_Sock);
}
link_num++;
pthread_t listen_p;
int ret;
rec_args a;
a.l=&link_num;
a.s=&Command_Sock;
ret= pthread_create( &listen_p, NULL, receive,(void *)&a ); //参数:创建的线程id,线程参数,线程运行函数的起始地址,运行函数的参数
}
return ;
} };
class j_client
{
private:
SOCKET Client_Sock;
SOCKADDR_IN server_addr;
char sendBuf[];
int error_num;
public: j_client(char * server_addr_str,int port)
{
WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(,),&wsa) != )
{
error_num=INIT_ERROR;
return; //代表失败
}
if((Client_Sock = socket(AF_INET, SOCK_STREAM, ))==-)
{
error_num=INIT_ERROR;
return; //代表失败
}
server_addr.sin_addr.S_un.S_addr=inet_addr(server_addr_str);
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(port);
if(connect(Client_Sock,(SOCKADDR*)&server_addr,sizeof(SOCKADDR)) ==-)
{
printf("connect error !");
//printf( "%d ", WSAGetLastError());
}
}
int j_send()
{
while(true)
{
printf("input message: ");
scanf("%s",sendBuf);
if(send(Client_Sock,sendBuf,strlen(sendBuf)+,)!=(strlen(sendBuf)+))
{
printf("send error !");
//printf( "%d ", WSAGetLastError());
}
}
return ;
}
int j_close()
{
closesocket(Client_Sock);
WSACleanup();
}
}; #endif // J_SOCKET_H_INCLUDED

Socket服务端和客户端(C++,CodeBlocks+GCC编译)的更多相关文章

  1. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  2. Python3学习之路~8.3 socket 服务端与客户端

    通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...

  3. C# Socket服务端和客户端互相send和receive

    服务端           {          ];          ;                                       {                       ...

  4. socket系列之socket服务端与客户端如何通信

    上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...

  5. PHP socket服务端与客户端的简易通信

    今天学习socket通信的同时,顺便整理了下以前初识socket的知识. 现在关于php的socket通信,有些框架已经十分成熟了,比如  swoole 和 workerman,这两个大家可以学习学习 ...

  6. Socket服务端和客户端文件传输

    很多朋友在使用socket编程时不可避免的都做过文件传输,而视频电影等需要一个字节一个字节的传输:但是客户端一般都通过-1进行终止,服务也一样:但是存在的问题是客户端永远不会把-1传递给服务端:因此经 ...

  7. golang的socket服务端与客户端

    服务端 服务端的处理流程 监听端口 接收客户端的链接 创建goroutine,处理该链接 package main import ( "fmt" "net" ) ...

  8. Android—Socket服务端与客户端用字符串的方式互相传递图片

    发送图片: 首先找到具体传递的图片: private Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new Bit ...

  9. 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)

    目录 成果 运行效果图 过程 1. 首先的问题是下棋的两端应该是什么样的? 2. 接下来的问题是怎么表示,怎么存储? 3. 然后应该怎么通信呢? 代码 main.cpp chinese_chess.h ...

随机推荐

  1. [WCF编程]10.操作:回调操作

    一.回调操作概述 WCF支持服务将调用返回给它的客户端.在回调期间,许多方面都将颠倒过来:服务将成为客户端,客户端将编程服务.回调操作可以用在各种场景和应用程序中,但在涉及事件或者服务发生时间需要通知 ...

  2. Hibernate框架中Criteria语句

    在Hibernate中有一种查询语句是Criteria查询(QBC查询),今天呢 我们就一个个的详细的跟大家一起探讨Criteria语句的相关知识点 案例前的准备 //插入测试数据,构建数据库 pub ...

  3. cron表达式详解[转]

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...

  4. html节点属性操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. ffmpeg实现dxva2硬件加速

    这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...

  6. Hibernate-chapter two

    又见面啦!!!经过上一章的学习,我们大概对Hibernate框架有所了解.接下来进入我们的第二阶段——实战! ======准备数据库====== 这里使用MySQL作为示范. 创建一个名为Hibern ...

  7. POJ-3061

    算法: 1. 定义两个整数N和S,输入序列长度到N,输入最小子序列和下界到S. 2. 定义一个数组arr[100002],从arr[1]开始依次输入N个序列元素到arr. 3. 定义一个整数ans,初 ...

  8. 【Apache大系】Apache服务器面面观

    Apache 2.2 中文官方文档 1. 先看看百度百科对Apache的解释: apache(Web服务器)_百度百科 2. apache服务器本质上说是一个TCP socket服务,socket模型 ...

  9. PHP程序员的技术成长规划

    按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定 ...

  10. Visual Studio中UnitTesting单元测试模板代码生成

             在软件研发过程中,单元测试的重要性直接影响软件质量.经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低.在软件开发的后期阶段,Bug的发 ...