您当前的位置:首页 > 互联网教程

C++新手如何学习socket

发布时间:2025-05-23 00:23:19    发布人:远客网络

C++新手如何学习socket

一、C++新手如何学习socket

1、先从最简单的Socket文档里了解普通的客户端和服务端工作步骤;

2、再而逐步了解阻塞和非阻塞模式;

3、再继续理解TCP/IP中的可靠连接和非可靠连接;

4、写出简单的客户端服务端工程,然后接着学习更多的协议,察看<<Windows核心编程>>;

5、最后再学习异步I/O操作,完成端口的使用方式,进而写出功能强大的Socket通讯程序。

二、Socket编程

最近也在学还有一个自己写的C++聊天程序有点大下面是C写的

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

在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!

3、将套接字绑定到一个本地地址和端口上(bind)。

4、将套接字设为监听模式,准备接收客户请求(listen)。

5、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。

6、用返回的套接字和客户端进行通信(send/recv)。

3、向服务器发出连接请求(connect)。

4、和服务器端进行通信(send/recv)。

#include<Winsock2.h>//加裁头文件

#include<stdio.h>//加载标准输入输出头文件

WORD wVersionRequested;//版本号

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

err= WSAStartup( wVersionRequested,&wsaData);

}//加载套接字库,加裁失败则返回

if( LOBYTE( wsaData.wVersion)!= 1||

HIBYTE( wsaData.wVersion)!= 1){

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。

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

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

//将套接字绑定到一个本地地址和端口上(bind)

listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求(listen)。

SOCKADDR_IN addrClient;//定义地址族

int len=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化

SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三个参数一定要有初始值。

//等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。

sprintf(sendBuf,"Welcome%s to ",

inet_ntoa(addrClient.sin_addr));

//用返回的套接字和客户端进行通信(send/recv)。

send(sockConn,sendBuf,strlen(sendBuf)+1,0);

closesocket(sockConn);//关闭套接字。等待另一个用户请求

wVersionRequested= MAKEWORD( 1, 1);

err= WSAStartup( wVersionRequested,&wsaData);加载套接字库

if( LOBYTE( wsaData.wVersion)!= 1||

HIBYTE( wsaData.wVersion)!= 1){

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);创建套接字(socket)。

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));向服务器发出连接请求(connect)。

char recvBuf[100];和服务器端进行通信(send/recv)。

recv(sockClient,recvBuf,100,0);

send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

closesocket(sockClient);关闭套接字。

WSACleanup();//必须调用这个函数清除参数

三、浅谈Java中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server= new ServerSocket(9998)这条语句创建了一个服务器对象,这个服务器使用9998号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。Socket incoming= server.accept()进而得到输入流和输出流,并进行封装BufferedReader in= new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out= new PrintWriter(incoming.getOutputStream(),true);随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。