Socket编程

请问Socket编程的基本步骤是怎样的?最好能写一个简单的程序(C/C++)演示一下,谢谢!

最近也在学 还有一个自己写的C++聊天程序 有点大 下面是C写的
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字 (SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字(SOCK_STREAM)。基于UDP采 用的数据报套接字(SOCK_DGRAM).
1.TCP流式套接字的编程步骤
在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!
服务器端程序:
1、加载套接字库
2、创建套接字(socket)。
3、将套接字绑定到一个本地地址和端口上(bind)。
4、将套接字设为监听模式,准备接收客户请求(listen)。
5、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。
6、用返回的套接字和客户端进行通信(send/recv)。
7、返回,等待另一客户请求。
8、关闭套接字。
客户端程序:
1、加载套接字库
2、创建套接字(socket)。
3、向服务器发出连接请求(connect)。
4、和服务器端进行通信(send/recv)。
5、关闭套接字
服务器端代码如下:
#include <Winsock2.h>//加裁头文件
#include <stdio.h>//加载标准输入输出头文件

void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );//1.1版本的套接字

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}//加载套接字库,加裁失败则返回

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}//如果不是1.1的则退出
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsigned short为网络字节序的格式
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字绑定到一个本地地址和端口上(bind)
listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求(listen)。

SOCKADDR_IN addrClient;//定义地址族
int len=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化

while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三个参数一定要有初始值。
//等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",
inet_ntoa(addrClient.sin_addr));
//用返回的套接字和客户端进行通信(send/recv)。
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);//关闭套接字。等待另一个用户请求
}
}
客户端代码如下:
#include <Winsock2.h>
#include <stdio.h>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );加载套接字库
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);创建套接字(socket)。

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));向服务器发出连接请求(connect)。

char recvBuf[100];和服务器端进行通信(send/recv)。
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

closesocket(sockClient);关闭套接字。
WSACleanup();//必须调用这个函数清除参数
}
温馨提示:内容为网友见解,仅供参考
无其他回答

深入理解Python:掌握socket编程的基础与实践
首先,让我们了解如何开始:导入socket模块,这是进行网络编程的起点。接着,基本的socket操作包括:创建套接字对象,通过socket.socket(地址族, 类型, 协议)完成绑定地址和端口,使用bind(address, port)指定监听位置启用监听,listen(num_connections)等待客户端连接接受连接,accept()方法获取新连接并获取客...

TCP、UDP通信总结
Socket编程简介 Socket是网络通信中的一个重要概念。在编程领域,它指的是用于客户端和服务端之间通信的一种约定。Socket编程在各种应用中都非常关键,例如浏览器、QQ、微信等。Socket编程在嵌入式系统中同样重要,因为很多电子设备正在趋向于联网。嵌入式领域内,Socket编程的需求也逐渐增多。在Socket编程中,...

Socket编程重点函数详解
Socket编程中的核心函数详解如下:首先,select()函数是关键。它在文件描述符集合中监视事件,当满足条件(如数据到达)时返回。非阻塞模式下,它会在条件满足时立即返回,阻塞模式则需等待事件。struct timeval的timeout参数用于设置超时时间,0表示立即返回,大于0则设定等待时间。其次,accept()主要在服务...

socket网络编程(四)——epoll多路复用问题
而epoll就是无需通过轮询就是可以找到那个发生IO事件的连接,它通过一个pollfd数组向内核传递需要关注的事件,故没有描述符个数的限制,epoll在内核初始化的时候向内核注册了一个文件系统,用于存储上述被监控的socket,所以无需轮询所有的socket连接,有点类似用空间换时间的意思。首先,还是先不扯其他的...

socket编程为什么要选择af_inet?
选择AF_INET进行Socket编程的主要原因 一、网络兼容性 AF_INET是IPv4网络地址家族的标识,它几乎涵盖了所有现代网络设备和操作系统。选择AF_INET意味着编写的程序能够在大多数环境中正常运行,无需针对特定硬件或软件环境进行特别适配。这种广泛的兼容性确保了应用程序的可用性和可移植性。二、标准化程度高 ...

信息安全课程8:套接字(socket) 编程
对于简单的socket应用编程,所需要做的就是记住流程。使用客户端-服务器端(client-server)模型作为一个例子。server一般打开端口,被动侦听,不需要知道客户端的IP和端口;而client发起请求,必须知道服务器端的IP和端口。在这个过程中,所需要用到的函数如下:再用一张图描述下客户端和服务器端的流程:接下来,我们看C\/S...

SOKET编程简述
Socket编程的旅程始于对基本概念的理解。开始时,你需要导入相关的编程库,创建Socket实例,指定协议、IP地址和端口号。对于客户端,这可能是连接到服务器的过程;而对于服务器,它则需要监听等待客户端的到来。一旦建立连接,数据的交换就变得轻而易举,无论是发送请求还是接收响应,Socket都能胜任。Socket...

java 中 Socket编程问题..
这就是Socket编程中的“套接字”概念:它提供了一种方法,使得不同位置的进程(如邮递员与酒店)之间能够进行通信。综上所述,客户端(邮递员)在Java Socket编程中送信至特定房间(目标端口)的过程并不依赖于其自身位置(源端口)。重要的是通过正确的IP地址和端口号建立连接,实现信息的传递。

socket编程·send和recv
socket的选项是 SOCK_DGRAM 。 send的返回值>0时, 返回值应该等于发送的数据长度 。如果send的数据大于MTU,会在IP层分片,到达目标机器后IP层重组。 send的返回值==0时,这个只在发送空串时出现。 注意: 真的会发送空数据的。 send的返回值<0时,检查errno,确定连接是否还正常。一般不...

Socket编程:listen()函数英文翻译
include < sys\/socket.h> int listen(intsocket, int backlog);其功能为标记一个指定的socket(socket参数)为接收连接模式,并将接收连接的队列长度限制为backlog参数所指定的数量。如果backlog参数的值小于0,函数将设置socket的监听队列长度为0。在socket的队列中,可能存在未完成的连接,该队列长度...

相似回答