代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
局域网TCP
作者:
BeGit
/ 发布于
2014/11/13
/
412
局域网TCP windows vs2008 本来添加文件传输的 写了一半 只写了TCP接收信息的框架
/******************************************************************************* * @file * @author def< qq group: 324164944 > * @blog http://www.cnblogs.com/itdef/ * @brief /*******************************************************************************/ #include "stdafx.h" #include "SocketClass.h" #pragma comment(lib,"ws2_32") BOOL CBasicTcpSocket::BasicTcpSocketInit(u_short port) { BOOL bRet = FALSE; struct sockaddr_in srv_addr; int addr_len = sizeof(srv_addr); int result; try{ sock_=::socket(AF_INET, SOCK_STREAM, 0); if(INVALID_SOCKET==sock_){ char buf[100] = {0}; FormatMsg(buf, sizeof(buf) ,"%s socket() error.Error code %d", \ __FUNCTION__,GetLastError()); throw exception(buf); } srv_addr.sin_family = AF_INET; srv_addr.sin_port = htons(port); srv_addr.sin_addr.s_addr = INADDR_ANY; result = bind(sock_,(struct sockaddr*)&srv_addr,addr_len); if(result == SOCKET_ERROR) { char buf[100] = {0}; FormatMsg(buf, sizeof(buf) ,"%s bind() error.Error code %d", \ __FUNCTION__,GetLastError()); throw exception(buf); } if( 0 != listen(sock_,SOMAXCONN) ) { char buf[100] = {0}; FormatMsg(buf, sizeof(buf) ,"%s listen() error.Error code %d", \ __FUNCTION__,GetLastError()); throw exception(buf); } bRet = TRUE; }catch(exception& e) { cout << e.what() << endl; } return bRet; } BOOL CTcpSocket::Start() { BOOL bRet = FALSE; InterlockedExchange(&threadRunFlag_,1); fd_set read_all; FD_ZERO(&read_all); FD_SET(sock_,&read_all); fd_set read_set; while(threadRunFlag_) { //cout << "Enter recv loop" << endl; try{ read_set = read_all; int ready_cnt = select(0,&read_set,NULL,NULL,NULL); if(ready_cnt == SOCKET_ERROR) { char buf[100] = {0}; FormatMsg(buf, sizeof(buf) ,"%s select() error.Error code %d", \ __FUNCTION__,GetLastError()); throw exception(buf); } if(FD_ISSET(sock_,&read_set)) { struct sockaddr_in faddr; int addr_len = sizeof(faddr); // 遍历sock组 找出未使用sock来使用 int idx = 0; for(idx= 0;idx < MAX_SOCKET_COUNT;idx++) { if(recvSock_[idx]==INVALID_SOCKET) { break; } } if(MAX_SOCKET_COUNT == idx) { cout << "too much connect" << endl; continue; } recvSock_[idx] = accept(sock_,(struct sockaddr*)&faddr,&addr_len); if(recvSock_[idx] == INVALID_SOCKET) { char buf[100] = {0}; FormatMsg(buf, sizeof(buf) ,"%s accept() error.Error code %d", \ __FUNCTION__,GetLastError()); cout << buf <<endl; FD_CLR(recvSock_[idx],&read_all); FD_CLR(recvSock_[idx],&read_set); recvSock_[idx] = INVALID_SOCKET; continue; } FD_SET(recvSock_[idx],&read_all); } for(int i = 0 ; i < MAX_SOCKET_COUNT;i++) { char buf[100] = {0}; if(!FD_ISSET(recvSock_[i],&read_set)) { continue; } int result = recv(recvSock_[i],buf,100,NULL); if(result != SOCKET_ERROR && 0 != result) { printf("recv: %s\n",buf); }else { char buf[100] = {0}; FormatMsg(buf, sizeof(buf) ,"%s recv() error.Error code %d", \ __FUNCTION__,GetLastError()); cout << buf <<endl; FD_CLR(recvSock_[i],&read_all); FD_CLR(recvSock_[i],&read_set); recvSock_[i] = INVALID_SOCKET; continue; } } bRet = TRUE; }catch(exception& e) { cout << e.what() << endl; } } return bRet; }
试试其它关键字
局域网
TCP
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
BeGit
贡献的其它代码
(
1
)
.
局域网TCP
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3