There are three types of socket programming: stream socket (sock_stream), datagram socket (sock_dgram), and original socket (sock_raw). TCP-based socket programming is a streaming socket.
Server programming steps:
1: load the socket library and create a socket (wsastartup ()/socket ());
2: bind a socket to an IP address and a port (BIND ());
3: Set the socket to listening mode and wait for the connection request (Listen ());
4: after the request arrives, accept the connection request and return a new socket (accept () corresponding to the connection ());
5: Use the returned socket to communicate with the client (send ()/Recv ());
6: return. Wait for another connection request;
7. Close the socket and the loaded socket Library (closesocket ()/wsacleanup ()).
Client programming steps:
1: load the socket library and create a socket (wsastartup ()/socket ());
2: Send a connection request (connect () to the server ());
3: communicate with the server (send ()/Recv ());
4: Close the socket and close the loaded socket Library (closesocket ()/wsacleanup ()).
Method 1: load/release the Winsock database:
1. Loading Method:
Wsadata WSA;
/* Initialize socket Resources */
If (wsastartup (makeword (1,1), & WSA )! = 0)
{
Return; // indicates an error.
}
2. Release Method:
Wsacleanup ();
Method 2: Construct a socket:
1. SERVER: Construct a listener socket and a streaming socket.
SocketListen_sock= Socket (af_inet, sock_stream, 0)
2. Client: Construct communication socket and stream socket.
Socket Client_ Sock= Socket (af_inet, sock_stream, 0)
Method 3: configure the listening address and port:
1. SERVER: sockaddr_inServeraddr
Zeromemory (char *)&Serveraddr, Sizeof (Serveraddr));
Serveraddr. Sin_family =Af_inet;
Serveraddr. Sin_port = htons (1234);/* Local port: 1234 */
Serveraddr. Sin_addr.s_addr = htonl (Inaddr_any);/* With IP */
Method 4: bind a socket:
1. SERVER: bind the listening socket.
BIND (Listen_sock,(Struct sockaddr *)&Serveraddr,Sizeof (Serveraddr))
Method 5: Server/client connection:
1. SERVER: Waiting for client access.
SocketCommand_sock= Accept (Listen_sock,...)
2. Client: request to connect to the server.
Int ret = connect (Client_sock,...)
Method 6: receive/send data:
1. SERVER: Wait for the client to access. Char Buf [1024].
Receive data: Recv (Command_sock, Buf ,...)
Or
Send data: Send (Command_sock, Buf ,...)
2. Client: request to connect to the server. Char Buf [1024].
Send data: Send (Client_ Sock, Buf ,...)
Or
Receive data: Recv (Client_ Sock, Buf ,...)
Method 7: Disable socket:
1. SERVER: Disable socket.
Closesocket (Listen_sock)
Closesocket (Command_sock)
2. Client: Disable socket.
Closesocket (Client_sock)
?
#include <stdio.h>#include <Winsock2.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 sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int
len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char
sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char
recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%s\n",recvBuf); closesocket(sockConn); } } |
#include <stdio.h>#include <Winsock2.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); 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)); send(sockClient,"hello",strlen("hello")+1,0); char recvBuf[50]; recv(sockClient,recvBuf,50,0); printf("%s\n",recvBuf); closesocket(sockClient); WSACleanup();}