自己参考网上教程写的,亲测可用.备份一下源代码,将来就不用重写了.
注:在code::blocks下编译时,要设置链接库.具体方法为:
菜单栏Settings->Compiler and debugger settings->Linker Settings->Add libws2_32.a
WinServ.c
---
/*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);
//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);
}
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.c
指定了客户端程序的源地址和源端口.
---
#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;
}