借此地方整理以下socket編程的多種語言的實現,socket可以跨平臺的通信,因此多語言、多平臺下的實現有必要了解的。代碼都是源自網上,感謝網友的分享。
socket編程在windows下的C語言實現,dev C++下編譯通過
編譯時設置編譯選項 工具-->編譯選項-->編譯器,勾選在連接器命令行加入以下命令,在對話框中填-lwsock32
//server.c
#include <stdio.h>
#include <Winsock2.h>
int 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>
int 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();
}