【转】socket通信流程及源码

转载 2011年01月17日 23:19:00
socket通信流程
2010-05-28 16:52
定义变量——获得WINSOCK版本——加载WINSOCK库——初始化——创建套接字 ——设置套接字选项——关闭套接字——卸载WINSOCK库——释放所有资源

 

整个程序架构分为两大部分,服务器端客户端。

服务器SOCKET程序流程

socket()→bind()→listen→accept()→recv()/send()→closesocket()

客户端:

socket→connect()→send()/recv()→closesocket()

 

 

服务器代码:

#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
int main(int argc, char* argv[])
{
WSADATA wsaData;
    WORD sockVersion = MAKEWORD(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
   return 0;
// 创建套节字
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
   printf("socket error/n");
   return 0;
}
// 在sockaddr_in结构中装入地址信息
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500); // htons函数 将主机的无符号短整形数转换成网络
//字节顺序
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 使套接字和本地地址绑定
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
   printf(" bind error /n");
   closesocket(sListen);
   return 0;
}
// 设置套接字进入监听模式
if(listen(sListen, 5) == SOCKET_ERROR)
{
   printf("listen error/n");
   closesocket(sListen);
   return 0;
}
// 循环接受客户的连接请求
sockaddr_in remoteAddr;
SOCKET sClient;
    int nAddrLen = sizeof(remoteAddr);
char revData[255];
while(TRUE)
{
   // 接受一个新连接
   sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
   //accept函数调用失败则继续等待连接。
   if(sClient == INVALID_SOCKET)
   {
    printf("accept() error");
    continue;
   }
   //打印出连接者的ip
   printf(" 接受到一个连接:%s /r/n", inet_ntoa(remoteAddr.sin_addr));
   //直到收到有效数据时才打印出来
   int ret=recv(sClient,revData,255,0);
        if(ret>0)
   {
    //为了防止打印出错,把字符串结尾设成0x00
    revData[ret]=0x00;
    printf(revData);
   }
   char *buff="/r/n学习SOCKET编程/r/n";
        //发送数据
   send(sClient,buff,strlen(buff),0);
   // 关闭套接字句柄,结束会话
   closesocket(sClient);
}
closesocket(sListen);
WSACleanup();
return 0;
}

 

客户端代码:


#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>

int main(int argc, char* argv[])
{
WSADATA wsaData;
    WORD sockVersion = MAKEWORD(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
   return 0;
// 创建套节字
    SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
   printf("socket error/n");
   return 0;
}
// 在sockaddr_in结构中装入服务器端地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4500);// htons函数 将主机的无符号短整形数转换成网络
                                 //字节顺序,4500端口为要连接服务器端的端口
servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服务器端ip
//连接服务器端
if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
{
   printf("connect error/n");
   closesocket(sClient);
   return 0;
}
char *buff="/r/nSOCKET编程,我来了/r/n";
    //发送数据
send(sClient,buff,strlen(buff),0);
char revData[255];
//直到收到有效数据时才打印出来
int ret=recv(sClient,revData,255,0);
if(ret>0)
{
   //为了防止打印出错,把字符串结尾设成0x00
   revData[ret]=0x00;
   printf(revData);
}
closesocket(sClient);
WSACleanup();
return 0;
}

Socket通信基本流程

Tcp通信基本流程:服务器端                                                                       客户端1.创建socket  ...
  • lyd_253261362
  • lyd_253261362
  • 2009年07月30日 16:05
  • 6119

SOCKET通信的基本步骤

SOCKET通信的基本步骤    1)建立一个服务器ServerSocket,并同时定义好ServerSocket的监听端口;    2)ServerSocket 调用accept()方法,使...
  • aidem_brown
  • aidem_brown
  • 2014年07月22日 22:40
  • 1093

Socket的含义及TCP Socket通信的基本流程

Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多...
  • u012686173
  • u012686173
  • 2014年10月27日 20:57
  • 1064

专业课程设计之客户与服务器程序的同步与通信机制的设计(二)TCP通信

专业课程设计之客户与服务器程序的同步与通信机制的设计(二)TCP通信
  • qq78442761
  • qq78442761
  • 2017年05月31日 13:09
  • 801

socket通信流程

原文:http://blog.csdn.net/xiaoweige207/article/details/6211577 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网...
  • dajinniu
  • dajinniu
  • 2015年06月25日 21:03
  • 197

Mina socket通信

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),M...
  • claudiii
  • claudiii
  • 2014年06月23日 15:55
  • 779

搜索引擎源码及流程

对从网络上抓取到的网页进行处理:建立网络库,分词,去重,if-tdf计算权重,归一化,然后根据查询词将文本相似度从高到低的依次返回给客户 第一阶段:python网络爬虫抓取网页,并存盘 第二阶段:对磁...
  • aa838260772
  • aa838260772
  • 2014年10月04日 13:11
  • 871

SOCKET通信程序源码

最近一段时间在学习了SOCKET,下面是程序源代码,都是在VC6.0环境下,用WIN32控制台程序写的: 1.TCP协议: 先写服务器端的程序,创建一个服务器端的工程,新建立一个C++源文件,代码如下...
  • ljt350740378
  • ljt350740378
  • 2013年07月14日 15:24
  • 6310

想做的都做好了休笔半个月,自动行政审批流程组件的审批流程流转实现【附数据库设计下载】

我们在上一篇文章 多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】中讲述了“自由行政审批流程组件”的用法及设计参考,现在我们接着讲它的升级...
  • jirigala
  • jirigala
  • 2010年10月24日 01:57
  • 1457

socket通信的基本流程

写在前面: 本博客内容主要为socket通信的C语言实现,与TCP-IP分类下的文章为对应互补内容。 由于理论知识已在对应内容中有所介绍,因此本博客中主要是代码实现: 1.面向连接的服务...
  • Meditator_hkx
  • Meditator_hkx
  • 2015年10月29日 20:44
  • 451
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【转】socket通信流程及源码
举报原因:
原因补充:

(最多只允许输入30个字)