Socket套接字程序编写步骤

来源:互联网 发布:打字骂人软件 编辑:程序博客网 时间:2024/05/22 03:52

服务器端程序的编写步骤:

第一步:调用socket()函数创建一个用于通信的套接字。

第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现。

第三步:调用listen()函数使套接字成为一个监听套接字。

第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。

第五步:处理客户端的连接请求。

第六步:终止连接。


客户端程序编写步骤:、

第一步:调用socket()函数创建一个用于通信的套接字。

第二步:通过设置套接字地址结构,说明客户端与之通信的服务器的IP地址和端口号。

第三步:调用connect()函数来建立与服务器的连接。

第四步:调用读写函数发送或者接收数据。

第五步:终止连接。

 

分别建两个工程。。把cpp拷贝进去运行就可以了。。。

server端:

 

#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
 //创建套接字
 WORD myVersionRequest;
 WSADATA wsaData;
 myVersionRequest=MAKEWORD(1,1);
 int err;
 err=WSAStartup(myVersionRequest,&wsaData);
 if (!err)
 {
  printf("已打开套接字\n");

 }
 else
 {
  //进一步绑定套接字
  printf("嵌套字未打开!");
  return;
 }
 SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字
 //需要绑定的参数
 SOCKADDR_IN addr;
 addr.sin_family=AF_INET;
 addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
 addr.sin_port=htons(6000);//绑定端口
 
 bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成
 listen(serSocket,5);//其中第二个参数代表能够接收的最多的连接数
 
 //////////////////////////////////////////////////////////////////////////
 //开始进行监听
 //////////////////////////////////////////////////////////////////////////
 SOCKADDR_IN clientsocket;
 int len=sizeof(SOCKADDR);
 while (1)
 {
  SOCKET serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
  char sendBuf[100];
  
  sprintf(sendBuf,"welcome %s to bejing",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
  send(serConn,sendBuf,strlen(sendBuf)+1,0);
  char receiveBuf[100];//接收
  recv(serConn,receiveBuf,strlen(receiveBuf)+1,0);
  printf("%s\n",receiveBuf);
  closesocket(serConn);//关闭
 WSACleanup();//释放资源的操作
 }
}

 

 

 

client端:

 


#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")

void main()
{
 int err;
 WORD versionRequired;
 WSADATA wsaData;
 versionRequired=MAKEWORD(1,1);
 err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息

 if (!err)
 {
  printf("客户端嵌套字已经打开!\n");
 }
 else
 {
  printf("客户端的嵌套字打开失败!\n");
  return;//结束
 }
 SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);
 SOCKADDR_IN clientsock_in;
 clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
 clientsock_in.sin_family=AF_INET;
 clientsock_in.sin_port=htons(6000);
 //bind(clientSocket,(SOCKADDR*)&clientsock_in,strlen(SOCKADDR));//注意第三个参数
 //listen(clientSocket,5);
 connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接

 char receiveBuf[100];
 recv(clientSocket,receiveBuf,101,0);
 printf("%s\n",receiveBuf);

 send(clientSocket,"hello,this is client",strlen("hello,this is client")+1,0);
 closesocket(clientSocket);
 WSACleanup();
}