SOCKET accept( SOCKET s, struct sockaddr FAR*addr, int FAR
*addrlen); //最后一个参数一定要赋值为 SOCKADDR结构体的长度 否则调用失败 这个MSDN的解释有
SOCKET是网络编程的接口 目前的C/S模式的开发都是基于 SOCKET 的
TCP服务器编写流程:
创建socket----------->配置SOCKADDR_IN并调用bind()函数绑定到socket----------->监听套接字调用listen()函数--------->调用accept()函数等待连接到来并且返回用于通信的socket----------------- ->双方通信 ----------------->通信结束closesocket
TCP 客户端编写流程 :
创建socket----------->配置SOCKADDR_IN (服务器端信息)------->connect连接到服务器端 ------>用本地创建的套接字进行通信 -------->通信结束 closesocket
1. 我这里将服务器端封装了一个 SocketSrv类 先启动服务端后启动客户端
/*
面向对象的套接字编程 服务端
基于TCP协议
*/
#include <iostream>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std ;
class SocketSrv
{
public :
BOOL InitSocketLibrary() //初始化套接字库
{
WSADATA wsa ;
if(WSAStartup(MAKEWORD(1,1),&wsa) )
return FALSE ;
return TRUE ;
}
void CreateSocket()
{
m_socket=::socket(AF_INET,SOCK_STREAM,0) ; //创建一个套接字
}
BOOL Bind(int port) //绑定端口
{
SOCKADDR_IN addr ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(port);
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //绑定本地网卡的任何IP
if(SOCKET_ERROR==::bind(m_socket,(SOCKADDR*)&addr,sizeof(SOCKADDR)))
return FALSE ;
return TRUE ;
}
void Listen()
{
::listen(m_socket,5) ; //最大连接5 监听端口
}
void Accept()
{
this->len=sizeof(SOCKADDR) ;
tem=::accept(m_socket,(SOCKADDR*)&addr,&len) ;
}
~SocketSrv()
{
::closesocket(m_socket) ;//关闭套接字
}
void CloseTemSocket()
{
::closesocket(tem) ;
}
void Recv(char *buf,int sizeofbuf)
{
recv(tem,buf,sizeofbuf,0) ;
}
void Send(char *sendbuf,int length)
{
send(tem,sendbuf,length,0) ;
}
SOCKET m_socket ;
SOCKET tem ;
SOCKADDR_IN addr;
int len;
};
void main()
{
SocketSrv sock;
sock.InitSocketLibrary() ;
sock.CreateSocket() ;
sock.Bind(9999) ;
sock.Listen() ;
cout<<"服务器启动成功:"<<endl ;
sock.Accept() ;
char buf[100] ;
char senddata[]="recvived data" ;
sock.Recv(buf,100) ;
cout<<"recv date :"<<buf<<endl ;
sock.Send(senddata,strlen(senddata)+1) ;
sock.CloseTemSocket() ;//关闭用于临时通话的 socket
}
2.
/*
客户端 TCP SockerSrv 我们自己写的类来实现 网络编程
*/
#include <iostream>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std ;
void main()
{
::WSADATA wsa ;
::WSAStartup(MAKEWORD(1,1),&wsa) ;
SOCKET s=::socket(AF_INET,SOCK_STREAM,0) ;
SOCKADDR_IN addr ;
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1") ; //将服务器地址转换为网络字节序 的ULONG类型
addr.sin_family=AF_INET;
addr.sin_port=htons(9999) ; //将端口转换为网路字节序 也就是高位先存 在计算机中一般是是 低位先存
::connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
char buf[]="hello !" ;
char recvbuf[100] ;
send(s,buf,strlen(buf)+1,0) ;
recv(s,recvbuf,100,0) ;
cout<<"服务器说:"<<recvbuf <<endl ;
}
分享到:
相关推荐
基于TCP IP 的socket客户端和服务器的编程,包含两个可执行文件,可以客户端和服务器直接通讯,界面做成了串口工具的样子。
今天与大家分享一个VC TCP服务端程序的编写实例,运行TCP/UDP的原理实现的一个服务端的程序示例,帮且VC 初学者了解网络的基本原理,测试时候可以选择是使用TCP或是UDP协议,虽然简单,不过可以向大家展示不少的网络...
VC socket TCP服务器客户端多连接 文件传输,代码示例
包括完整的客户端和服务端,有完整的VC6.0源代码,内容袎,有助初学者入门。
基于TCP的客户与服务器通信程序实例 客户端和服务端的简单通信
主要介绍了vc++实现的tcp socket客户端和服务端示例,需要的朋友可以参考下
使用VC6开发的TCP/IP套接口的通信调试工具,包括服务器端和客户端的程序,启动服务器端工具,配置端口,再启动客户端,对应的端口即可,客户端可同时启动多个。
这是tcp/ip通讯的vc++控件及范例源码,包含一组非常优秀的socket控件源码,demo程序包括客户端程序和服务端程序,实现tcp/ip通信的数据接收发送。
计算机网络实验设计 vc网络聊天室源代码 基于TCP的网络聊天室的设计(VC++版) 含有源代码和详细报告
基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序分为服务器端和用户端两部分 本实验是本人做的计算机网络课程设计,有mfc的CSocket编的..给大家分享下 支持多人聊天,可以用,先运行服务器端,点击监听,...
服务端和客户端代码,sockets (套接字)...基于 TCP 的 socket 编程是采用的流式套接字。在这个程序中,将两个工 程添加到一个工作区。要链接一个 ws2_32.lib 的库文件(#pragma comment(lib,"ws2_32"))。
功能概要:1.串口,TCP服务端/客户端,UDP服务端/客户端通讯调试2.支持Hex,ASCII,UTF8,GB2312编码调试3.接收数据可通过右键菜单一键计算Hex对应的数值
通过MFC,利用SOCKET TCP实现聊天的例子 分为服务器和客户端 客户端连接服务器端,开启聊天线程 编译环境为VC6
内容索引:VC/C++源码,网络相关,UDP TCP UDP高级编程:一个VC++服务端程序,可选择Socket类型,是UDP还是TCP,这仅是个服务器端程序,不过也可发送消息哦,例子虽然简单了点,但可以说明不少的问题,有意思的自己...
这是一个 vs2008 编写的 服务端与客户端 测试成功
使用Vc6.0编写的pc软件服务端程序,基于socket的PC局域网TCP通信测试软件
VC TCP/IP 支持异步传输 使用CCESocket ,客户/服务端示例和代码
VC 实现远程字典在线查单词功能,C/S结构的程序,分服务端和客户端,演示了基于TCP的远程字典服务(RemoteLookup) ,作者:胡峰令 通过在远端主机上搭建一个远程字典服务服务器,其它主机可以通过客户端程序 ...
用VC6开发的一个工具类 可以在窗口上播放视频、播放声音(两者都是基于DirectShow)、播放flash(基于shockwaveflash控件)、串口收发数据(基于mscomm控件)、Socket收发数据(包括TCP UDP协议 服务端客户端)、托盘图标。...