Socket服务端和客户端(C++,CodeBlocks+GCC编译)
//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编译)的更多相关文章
- C# Socket服务端与客户端通信(包含大文件的断点传输)
步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤: (1)建立一个Socket (2)接收 ...
- Python3学习之路~8.3 socket 服务端与客户端
通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...
- C# Socket服务端和客户端互相send和receive
服务端 { ]; ; { ...
- socket系列之socket服务端与客户端如何通信
上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...
- PHP socket服务端与客户端的简易通信
今天学习socket通信的同时,顺便整理了下以前初识socket的知识. 现在关于php的socket通信,有些框架已经十分成熟了,比如 swoole 和 workerman,这两个大家可以学习学习 ...
- Socket服务端和客户端文件传输
很多朋友在使用socket编程时不可避免的都做过文件传输,而视频电影等需要一个字节一个字节的传输:但是客户端一般都通过-1进行终止,服务也一样:但是存在的问题是客户端永远不会把-1传递给服务端:因此经 ...
- golang的socket服务端与客户端
服务端 服务端的处理流程 监听端口 接收客户端的链接 创建goroutine,处理该链接 package main import ( "fmt" "net" ) ...
- Android—Socket服务端与客户端用字符串的方式互相传递图片
发送图片: 首先找到具体传递的图片: private Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new Bit ...
- 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)
目录 成果 运行效果图 过程 1. 首先的问题是下棋的两端应该是什么样的? 2. 接下来的问题是怎么表示,怎么存储? 3. 然后应该怎么通信呢? 代码 main.cpp chinese_chess.h ...
随机推荐
- Newtonsoft.Json(Json.Net)学习笔记
Newtonsoft.Json 在Vs2013中就有自带的: 下面是Json序列化和反序列化的简单封装: /// <summary> /// Json帮助类 /// </summar ...
- appach2.4 + php7 +mysql5.7.14 配置
步骤1.首先打开Apache2.2\conf里面的httpd.conf文件.在里面找到: ServerRoot ,改成Appache所在目录 步骤二 在LoadModule 后面添加支持php7的扩 ...
- Easyui的渲染
锻炼完身体九点到电脑旁,加上整理明天的接口文档,到现在22:38:10:-_-!!,心累 今天整理下Easyui是如何渲染的: <input class="easyui-combobo ...
- 使用C#开发数据库应用系统
第一章 初识Windows程序 01.浅谈控制台应用 解析:控制台应用程序:dos窗口中显示 Windows窗体应用程序:有控件参与的,支持事件的一种程序 02.关于窗体项目的注意点: /*01.一个 ...
- AlloyRenderingEngine开门大吉
快速入口 不读文章可以直接拐向这里: github:https://github.com/AlloyTeam/AlloyRenderingEngine website:http://alloyteam ...
- UITableView优化
作为iOS开发,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻. 关于TableView,我想最核心的就是UITableViewCell的重用机制了. 简单来说呢就是当 ...
- 显示快照监控:/SDF/MON
透过SE38运行程序/SDF/MON,可以显示屏幕的监控快照:
- SharePoint 2013 文档上传的多种形式
SharePoint 2013 中的某些功能需要使用 ActiveX 控件.这会在不支持 ActiveX 的浏览器上产生限制.目前只有 32 位版本的 Internet Explorer 支持此功能. ...
- Android动画例子。
例子一: 补间动画效果,从右进,从左出. ImageSwitcher mImageSwitcher = new ImageSwitcher(this); mImageSwitcher.setFacto ...
- org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not a ...