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. In this Program To add two projects to one workspace. Link a library file of ws2_32.lib.
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 ()).
Server Code As follows: # Include < Stdio. h >
# Include < Winsock2.h >
Void Main ()
{
Word wversionrequested;
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 );
}
}
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 ()).
The client code is as follows: # Include < Stdio. h >
# Include < Winsock2.h >
Void Main ()
{
Word wversionrequested;
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 ();
}
(Transfer)