socket学习参考链接,赞一个:http://blog.csdn.net/hguisu/article/details/7445768

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据包套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程采用的都是流式套接字。

服务端socket编程步骤:

1、加载套接字库,创建套接字(WSAStartup()/socket());

2、绑定套接字到一个IP地址和一个端口上(bind());

3、将套接字设置为监听模式等待请求(listen());

4、请求到来后,接受请求,返回一个新的对应于此次连接的套接字(accept());

5、用返回的套接字和客户端通信(send()/recv());

6、返回,等待另一连接请求;

7、关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup());

客户端socket编程步骤:

1、加载套接字库,创建套接字(WSAStartup()/socket());

2、向服务端发送连接请求(connect());

3、和服务端进行通信(send()/recv());

4、关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup());

第一式: 加载/释放Winsock库:

1.加载方法:

WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
{
    return;   //代表失败
}

2.释放方法:

WSACleanup();

第二式: 构造SOCKET:

1.服务端:构造监听SOCKET,流式SOCKET.
   SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)

2.客户端:构造通讯SOCKET,流式SOCKET.
SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0)

第三式:配置监听地址和端口:

1.服务端: SOCKADDR_IN serverAddr
ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
   serverAddr.sin_family = AF_INET;
   serverAddr.sin_port = htons(1234);           /*本地监听端口:1234*/
   serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/

第四式:   绑定SOCKET:

1.服务端:绑定监听SOCKET.
  bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr))

第五式: 服务端/客户端连接:

1.服务端:等待客户端接入.
   SOCKET Command_Sock = accept(Listen_Sock, ...)

2.客户端:请求与服务端连接.
int ret = connect(Client_Sock, ...)

第六式: 收/发数据:

1.服务端:等待客户端接入.char buf[1024].
    接收数据:recv(Command_Sock,buf, ...)

    发送数据:send(Command_Sock,buf, ...)

2.客户端:请求与服务端连接.char buf[1024].
    发送数据:send(Client_Sock,buf, ...)

    接收数据:recv(Client_Sock,buf, ...)

第七式: 关闭SOCKET:

1.服务端:关闭SOCKET.
   closesocket(Listen_Sock)
closesocket(Command_Sock)

2.客户端:关闭SOCKET.
closesocket(Client_Sock)

server端:

 #include "stdafx.h"
#include <stdio.h>
#include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main(int argc, char* argv[])
{
//初始化WSA(Windows Sockets API)
WORD sockVersion = MAKEWORD(, ); //高8位设置2,低8位设置2
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != ) //sockVersion是一个int型变量
{
return ;
} //创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //socket(int family, int type, int protocol)
if (slisten == INVALID_SOCKET)
{
printf("socket error !");
return ;
} //绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET; //协议域
sin.sin_port = htons(); //端口
sin.sin_addr.S_un.S_addr = INADDR_ANY; //协议地址
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) //bind(SOCKET sock, const struct sockaddr *addr)
{
printf("bind error !");
} //开始监听
if (listen(slisten, ) == SOCKET_ERROR)
{
printf("listen error !");
return ;
} //循环接收数据
SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[];
while (true)
{
printf("等待连接...\n");
sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if (sClient == INVALID_SOCKET)
{
printf("accept error !");
continue;
}
printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr)); //接收数据
int ret = recv(sClient, revData, , );
if (ret > )
{
revData[ret] = 0x00;
printf(revData);
} //发送数据
char * sendData = "你好,TCP客户端!\n";
send(sClient, sendData, strlen(sendData), );
closesocket(sClient);
} closesocket(slisten);
WSACleanup();
return ;
}

client端:

 #include "stdafx.h"
#include <WINSOCK2.H>
#include <STDIO.H> #pragma comment(lib,"ws2_32.lib") int main(int argc, char* argv[])
{
WORD sockVersion = MAKEWORD(,);
WSADATA data;
if(WSAStartup(sockVersion, &data) != )
{
return ;
} SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sclient == INVALID_SOCKET)
{
printf("invalid socket !");
return ;
} sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons();
serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
printf("connect error !");
closesocket(sclient);
return ;
}
char * sendData = "你好,TCP服务端,我是客户端!\n";
send(sclient, sendData, strlen(sendData), ); char recData[];
int ret = recv(sclient, recData, , );
if(ret > )
{
recData[ret] = 0x00;
printf(recData);
}
closesocket(sclient);
WSACleanup();
return ;
}

socket编程学习step1的更多相关文章

  1. JAVA Socket 编程学习笔记(二)

    在上一篇中,使用了 java Socket+Tcp/IP  协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协 ...

  2. JAVA Socket 编程学习笔记(一)

    1. Socket 通信简介及模型 Java Socket 可实现客户端--服务器间的双向实时通信.java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的cli ...

  3. Socket编程学习之道:揭开Socket编程的面纱

    对TCP/IP.UDP.Socket编程这些词你不会非常陌生吧?随着网络技术的发展.这些词充斥着我们的耳朵. 那么我想问: 1.         什么是TCP/IP.UDP? 2.         S ...

  4. LInux下socket编程学习笔记

    1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...

  5. 记一次:Windows的Socket编程学习和分析过程

    Socket编程依赖于:WS2_32.dll --- 服务端 --- .导入我们需要的函数 #incldue <windows.h> //#include<WinSock2.h> ...

  6. Android Socket编程学习笔记

    http://blog.csdn.net/eyu8874521/article/details/8847173 度娘给出的描述:通常也称作"套接字",用于描述IP地址和端口,是一个 ...

  7. C++的socket编程学习

    前言 不得不承认作为一个前端开发,仍有一个后台开发的梦.从socket通信开始学习,在工作之余补充学习点相关知识,记录下学习的过程. 服务端 服务器代码如下,在设置listen之后,通过accept获 ...

  8. BSD socket编程学习

    1.socket简介 BSD是实现TCP/IP协议通信的软件系统,socket是应用编程接口,为app提供使用TCP/IP协议通信的接口. 网络层IP提供点到点服务(IP地址标识),传输层TCP和UD ...

  9. socket编程学习

    socket: 也称作套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求. 常用的套接字API函数: 1.socket(): 函数原型为:int socket(int domain, int ...

随机推荐

  1. node08-express

    目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...

  2. Easyui columns列图片移位问题!!!

    InitGrid: function () { $("#list").datagrid({ toolbar: '#tb', url: BanZhengXiaoLuSearch.Aj ...

  3. 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统

    引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...

  4. MS SQLServer 批量附加数据库 分类: SQL Server 数据库 2015-07-13 11:12 30人阅读 评论(0) 收藏

    ************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注释 ...

  5. Android Studio 引用 gson-2.6.2-sources

    1.拷贝到libs下

  6. Git 版本管理的简单理解

    来源:百度知道 现在使用Git版本管理代码的项目非常多.但是Git本身是一条复杂的系统.我从几个简单的点来说明Git的基本功能.希望能帮助初学者快速入门. 工具/原料   Git code dot j ...

  7. Spring Cloud 统一配置

    http://blog.csdn.net/catoop/article/details/50955949

  8. leanote个人版安装

    https://github.com/leanote/leanote/wiki/Leanote-%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB% ...

  9. 螺旋方阵(4x4)(java实现)

    代码如下: public class N { public static void main(String[] args) { final int N=4; int a[][]=new int[N][ ...

  10. webdav不识别软链接?解决办法?

    webdav不识别软链接?解决办法? 在使用webdav实现公网存储共享的时候,发现webdav并不支持软链接的共享,如下源代码可以100%确定这个问题 /* ### for now, only pr ...