说说关于我这两天对socket的理解
2013-08-05 23:29
225 查看
本人新手一枚,在c++的路上走了也有一年半载了,但由于各种各样的原因,总是断断续续的去学学。这两天刚刚学习了socket相关的编程,特写这份笔记来加深我自己的记忆,以及看看自己能不能把学到的东西再现出来。
首先我们要使用WSAStartup()来进行socket的初始化,其中WSAStartup有两个参数,一般WSAStartup(2,0)这样去调用即可。
然后就到创建socket套接字的步骤,socket函数有三个参数,首先第一个是int af,因为我们要进行的是网络间的通信,所以我们要选择AF_INET,而关于在windows本地进行的通信该怎么写,还有待研究。第二个int type,要进行流套接字通信的要写SOCK_STREAM,数据报套接字的则是选用SOCK_DGRAM,一般我们现在使用的都是SOCK_STREAM了。第三个int protocol一般是取0,表示tcp/ip协议。
创建好套接字之后,要做的就是把套接字与本地的地址绑定起来了,其中绑定的函数是bind,其包含三个参数SOCKET s,(sockaddr*)&sockaddr_in,sizeof(sockaddr_in)。其中sockaddr是用sockadd_in这个结构体创建出来的结构的地址强制转换过来的,我们首先要用sockaddr_in这个结构体来进行对本机地址的定义,其中sockaddr_in.sin_family = AF_INET,sockaddr_in.sin_port = 约定的端口号,sockaddr_in.sin_addr.S_un.S_addr=inet_addr("要放的ip")/进行转换,该函数将一个点分十进制ip地址转换成一个长整型的数,设置好以后就可以运用bind函数对端口号和本机的ip地址进行绑定了!bind(socket s,(sockaddr*)&sockaddr_in,sizeof(sockaddr_in));运行成功后会返回0,假若是客户端s就是已经可以使用的了。
这里面最为重要的是搞清楚sockaddr_in这个结构的作用,我查了不少资料,耗了不少时间才搞好了ip地址这一点点功能,要熟练起来,还要继续深究一下。
至于服务端还要要另外加listen() 和 accept()两个函数才能够进行服务,这个我下次再写写。
附上今天写的客户端的一点点代码(有点凌乱,使用vs2012来练习写的):
首先我们要使用WSAStartup()来进行socket的初始化,其中WSAStartup有两个参数,一般WSAStartup(2,0)这样去调用即可。
然后就到创建socket套接字的步骤,socket函数有三个参数,首先第一个是int af,因为我们要进行的是网络间的通信,所以我们要选择AF_INET,而关于在windows本地进行的通信该怎么写,还有待研究。第二个int type,要进行流套接字通信的要写SOCK_STREAM,数据报套接字的则是选用SOCK_DGRAM,一般我们现在使用的都是SOCK_STREAM了。第三个int protocol一般是取0,表示tcp/ip协议。
创建好套接字之后,要做的就是把套接字与本地的地址绑定起来了,其中绑定的函数是bind,其包含三个参数SOCKET s,(sockaddr*)&sockaddr_in,sizeof(sockaddr_in)。其中sockaddr是用sockadd_in这个结构体创建出来的结构的地址强制转换过来的,我们首先要用sockaddr_in这个结构体来进行对本机地址的定义,其中sockaddr_in.sin_family = AF_INET,sockaddr_in.sin_port = 约定的端口号,sockaddr_in.sin_addr.S_un.S_addr=inet_addr("要放的ip")/进行转换,该函数将一个点分十进制ip地址转换成一个长整型的数,设置好以后就可以运用bind函数对端口号和本机的ip地址进行绑定了!bind(socket s,(sockaddr*)&sockaddr_in,sizeof(sockaddr_in));运行成功后会返回0,假若是客户端s就是已经可以使用的了。
这里面最为重要的是搞清楚sockaddr_in这个结构的作用,我查了不少资料,耗了不少时间才搞好了ip地址这一点点功能,要熟练起来,还要继续深究一下。
至于服务端还要要另外加listen() 和 accept()两个函数才能够进行服务,这个我下次再写写。
附上今天写的客户端的一点点代码(有点凌乱,使用vs2012来练习写的):
// prctise2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <winsock2.h> #include <iostream> #include <stdio.h> #include <cstring> #pragma comment(lib,"ws2_32") #define SERVERPORT 3333 #define MAXDATASIZE 100 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; if((WSAStartup(MAKEWORD(2,0),&wsaData))==0){ printf("初始化成功!\n");} SOCKET s=socket(AF_INET,SOCK_STREAM,0); if(s!=INVALID_SOCKET){printf("套接字创建成功!\n");} //获取服务器主机信息 //准备服务器的信息 sockaddr_in s1_addr; s1_addr.sin_family=AF_INET; s1_addr.sin_addr.S_un.S_addr=inet_addr("192.168.19.101"); s1_addr.sin_port=htons(SERVERPORT); int ret=connect(s,(sockaddr*)&s1_addr,sizeof(s1_addr)); if(ret != SOCKET_ERROR){printf("连接成功!\n");} //发送数据 char buf[50]; string str; int i=0,ii=0x10; while(i!=ii){printf("%d\n",i);i++;} while(1){ cin >> buf; printf("%d.输入完毕!正在发送···\n",i); send(s,buf,50,0); Sleep(500); i++; } //关闭套接字 shutdown(s,SD_BOTH); closesocket(s); return 0; }
相关文章推荐
- Java关于个人对于Socket的理解,Socket多线程批量上传文件,适合新手
- 关于socket的一些个人理解
- 关于C#里面socket编程的一点理解
- 关于socket编程的一点心得理解
- 关于TCP、HTTP、Socket的自我理解
- 关于对socket的理解
- 关于Socket的编程以及信号量的进一步理解
- 关于C#里面socket编程的一点理解
- 关于tcp协议断开连接以及在socket编程时候连接的一些理解
- 关于socket的套接字中输入输出流的理解
- 关于socket通信UDP,TCP的理解
- 关于linux socket 编程 端口复用的理解
- 关于SocketAsyncEventArgs的一些理解
- 关于linux socket 编程 端口复用的理解
- 关于socket 绑定过程中对地址初始化使用的htonl函数的一些理解(转载)
- 关于Socket的编程以及信号量的进一步理解
- 关于socket通信的理解,socket连接通过IP+端口号的方式,那么如果两个服务器端的应用在同一台机器上,并且位于同一个tomcat容器下,那么岂不是两个服务器都收到了客户端发送的信息
- 关于socket的认识理解
- 关于socket的理解
- 关于linux下的TCP 的socket server和client,我的理解