基于TCP的网络通信(SCOKET)

基于TCP协议的网络通信
利用SOCKET套接字实现客户端与服务器间的连接

1、 面向连接编程(TCP)

面向连接的网络应用程序开发流程比较固定,需要开发者创建服务器与客户端两个应用程序,通过网络实现进程间的通讯。

●  服务器端流程

①  创建套接字(socket)

②    服务绑定(bind)

③    服务侦听(listen)

④    处理新到连接(accept)

⑤    数据收发(recv\send)

⑥    套接字关闭(close)

●  客户端流程

① 客户端套接字创建(socket)

② 发起连接 (connect)

③  数据发收(send\recv)

④ 套接字关闭(close)


CLIENT:

#include <windows.h>
#include <string.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

void main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD( 2, 2 );
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
        return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
    {
        WSACleanup( );
        return;
    }
	SOCKET sockCli;
	sockCli = socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addrSer;
	addrSer.sin_family = AF_INET;
	addrSer.sin_port = htons(5050);
	addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	int res = connect(sockCli,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));
	if(res != 0)
	{
		cout<<"Client Connect Server Failed!"<<endl;
	}
	else
	{
		cout<<"Client Connect Server Success!"<<endl;
	}

	char sendbuf[256];
	char recvbuf[256];
	while(1)
	{
		recv(sockCli,recvbuf,256,0);
		cout<<"Server:> "<<recvbuf<<endl;
		cout<<"Client:> ";
		cin>>sendbuf;
		send(sockCli,sendbuf,strlen(sendbuf)+1,0);
	}
	closesocket(sockCli);
	WSACleanup();
} 

SERVER:

#include <iostream>
#include <windows.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

void main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD( 2, 2 );
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
        return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
    {
        WSACleanup( );
        return;
    }

    SOCKET sockSer;
    sockSer = socket(AF_INET,SOCK_STREAM,0);//TCP/IP
    SOCKADDR_IN addrSer;
    SOCKADDR_IN addrCli;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(5050);//host to net short
    addrSer.sin_addr.S_un.S_addr = inet_addr("192.168.0.144");

    bind(sockSer,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));

    listen(sockSer,5);

    cout<<"Server Wait Client Connect"<<endl;

    SOCKET sockConn;
    int len = sizeof(SOCKADDR);
    sockConn = accept(sockSer,(SOCKADDR*)&addrCli,&len);
    if(sockConn == INVALID_SOCKET)
    {
        cout<<"Server Accept Client Connect failed"<<endl;
        closesocket(sockSer);
		WSACleanup();
		return;
    }
    else
    {
        cout<<"Server Accept Client Connect Success!"<<endl;
    }
    char sendBuf[256];
	char recvBuf[256];
	while(1)
	{
		cout<<"Ser :> ";
		cin>>sendBuf;
		send(sockConn, sendBuf, 256, 0);
		recv(sockConn, recvBuf, 256, 0);
		cout<<"Cli :>"<<recvBuf<<endl;
	}
	closesocket(sockSer);
	WSACleanup();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 22:07:07

基于TCP的网络通信(SCOKET)的相关文章

浅析C#基于TCP协议的SCOKET通信

TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在.net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序. C#基于TCP协议的网络通讯 要进行C#基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分--主机名和端口,

基于TCP协议的网络通信

**重点内容**1.使用InetAddress(IP地址类) 这个类有点儿奇葩,没有提供构造方法.而是有两个静态方法来实例化. ·getByName(String host) 通过主机名获取对应的InetAddress对象 ·getByAddress(byte[] addr) 通过IP地址获取对应的InetAddress对象 getCononicalHostName() 获取IP地址的全限定域名 getHostAddress() 返回IP地址字符串 getHostName() 获取IP地址的主机

【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)

c#开源IM系统 把系统中集成的IM部分,提取出来,共大家参考,也可以作为大家学习networkcomms框架的一个demo 名称:微风IM 名称来源: 微 小的意思 是说系统比较简单 风 是由于UI使用的风绪老师多年前在网上开源的高仿真qq2008中的代码,在此表示特别感谢 数据库使用的是mssql 2005. c# 2.0开发 通信框架使用的是来自英国剑桥的c#开源通讯框架 networkcomms2.3.1  可以进入此页面下载 networkcomms网络通讯框架学习 使用network

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件) 我们来看一下代码 //升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的) private UpgradeConfig upgradeConfig = null; //客户端存储升级配置文件的地址 是放在客户端根目录下的 (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置) string

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

升级程序启动后,首先会连接服务器 private void Connect() { try { int port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Port"]); connnectionInfo = new ConnectionInfo(IPAddress, port); connection = TCPConnection.GetConnection(connnectionInfo)

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

升级程序客户端接收文件 /// <summary> /// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据 /// </summary> Dictionary<ConnectionInfo, Dictionary<long, byte[]>> incomingDataCache = new Dictionary<ConnectionInfo, Dictionary<long, byte[]>>();

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

基于 TCP/IP 协议的网络编程

在说明基于 TCP/IP 协议的网络编程之前,先来了解一下 Socket(网络套接字): 利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准 通信的两端都要有 Socket,是两台机器间通信的端点(API 原话) 网络通信其实就是 Socket 间的通信 Socket 允许程序把网络连接当成一个流,数据在两个 Socket 间通过 IO 传输 一般主动发起通信的应用程序属客户端,等待通信请求的为服务端 网络编程某种程度上可以称作"Socket 编程" T

基于TCP的字符串传输程序

---恢复内容开始--- LINUX中的网络编程是通过SOCKET接口来进行的. Socket(套接字) Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接,双方就可以发送和接收数据了.Socket的定义类似于文件句柄的定义.下面的流程图大概描述了基于TCP协议的网络编程过程.同学们只需要对大概流程有一个初步认识即可,暂时不必深究每个函数的意义.因为在后面的实训子任务中,每一个函数的具体内容和使用方法都会讲到. TCP协议socket流程图 基本套接字