本身參考網上教程寫的,親測可用.備份一下源代碼,未來就不用重寫了.windows
注:在code::blocks下編譯時,要設置連接庫.具體方法爲:socket
菜單欄Settings->Compiler and debugger settings->Linker Settings->Add libws2_32.adebug
WinServ.c code
---server
/*This is a program to create a WinServer listening to 127.0.0.1:25340*/
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[]){教程
WSADATA wsa;
short port=25340;
char ServerIP[11]="127.0.0.1";
//初始化 socket
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
printf("Socket Init failed!\n");
exit(-1);
}
//Create socket
SOCKET serverSocket;
if((serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
printf("Socket Create failed!\n");
exit(-1);
}
struct sockaddr_in serverAddress;
memset(&serverAddress,0,sizeof(struct sockaddr_in));
serverAddress.sin_family=AF_INET;
serverAddress.sin_addr.s_addr=inet_addr(ServerIP);
serverAddress.sin_port=htons(port);it
//bind
if(bind(serverSocket,(struct sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR){
printf("Socket Bind Failed!\n");
exit(-1);
}
//listen
if(listen(serverSocket,SOMAXCONN)==SOCKET_ERROR){
printf("Socket Listen Failed!\n");
exit(-1);
}io
printf("Server is listening......ServerIP:%s port:%d\n",ServerIP,port);
SOCKET clientSocket;
struct sockaddr_in clientAddress;
memset(&clientAddress,0,sizeof(clientAddress));
int addrlen=sizeof(clientAddress);
if((clientSocket=accept(serverSocket,(struct sockaddr*)&clientAddress,&addrlen))==INVALID_SOCKET){
printf("Appect client conn failed\n");
exit(-1);
}
else{
printf("Get client connected from ClientIP %s Port:%d \n",inet_ntoa(clientAddress.sin_addr),ntohs(clientAddress.sin_port));
}
WSACleanup();
return 0;
}
編譯
WinClient.ccli
指定了客戶端程序的源地址和源端口.
---
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
WSADATA wsa;
short port=1257;
//初始化 socket
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
printf("Socket Init failed!\n");
exit(-1);
}
SOCKET clientSocket;
if((clientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
printf("Socket Create failed!\n");
exit(-1);
}
struct sockaddr_in clientAddress;
memset(&clientAddress,0,sizeof(struct sockaddr_in));
clientAddress.sin_family=AF_INET;
clientAddress.sin_addr.s_addr=inet_addr("127.0.0.1");
clientAddress.sin_port=htons(port);
struct sockaddr_in serverAddress;
memset(&serverAddress,0,sizeof(struct sockaddr_in));
serverAddress.sin_family=AF_INET;
serverAddress.sin_addr.s_addr=inet_addr("127.0.0.1");
serverAddress.sin_port=htons(25340);
if(bind(clientSocket,(struct sockaddr*)&clientAddress,sizeof(clientAddress))==SOCKET_ERROR){
printf("Socket Bind Failed!\n");
exit(-1);
}
if((connect(clientSocket,(struct sockaddr*)&serverAddress,sizeof(serverAddress)))==SOCKET_ERROR){
printf("Connect Failed.\n");
exit(-1);
}
closesocket(clientSocket);
return 0;
}