#include <Winsock.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"wsock32.lib")
#define PORT 12345
#define BUFFER 1024
int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKET server;
// char buf_send[BUFFER];
char buf_recv[BUFFER]="hello!";
int len;
struct sockaddr_in serv,client; //声明两个地址结构体变量
// memset(buf_recv,0,sizeof(buf_recv));
// memset(buf_send,0,sizeof(buf_send));
//加载套接字库
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
printf("Winsock load failed\n");
exit(0);
}
server = socket(AF_INET,SOCK_STREAM,0);
if(server == INVALID_SOCKET)
{
printf("socket failed:%d\n",WSAGetLastError());
exit(0);
}
//创建一个套接字 AD_INET(IPV4协议) SOCK_STREAM(TCP协议)
serv.sin_family = AF_INET; //协议族必须和创建套接字时候一样(socket)
serv.sin_port = htons(PORT); //端口 htons转换为网络字节序
serv.sin_addr.s_addr = htonl(INADDR_ANY); //绑定的地址 htonl转换为网络字节序
//INADDR_ANY 默认的网卡地址为本机
//bind 绑定地址
if(bind(server,(SOCKADDR *)&serv,sizeof(serv))==SOCKET_ERROR)
{
printf("bind()failed:%d\n",WSAGetLastError());
exit(0);
}
//监听客户端
if(listen(server,5)==SOCKET_ERROR)
{
printf("listen()failed:%d\n",WSAGetLastError());
exit(0);
}
len=sizeof(client);
//accept阻塞 直到有新的连接
if(accept(server,(struct sockaddr*)&client,&len) == INVALID_SOCKET)
{
printf("accept()failed:%d\n",WSAGetLastError());
exit(0) ;
}
printf("accepted client IP:[%s]\n,port:[%d]\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
while(1)
{
//recv读取消息
if(recv(server,buf_recv,sizeof(buf_recv),0) == 0)
{
printf("recv()failed:%d\n",WSAGetLastError());
exit(0);
}
printf("recv()data from client:%s\n",buf_recv);
//send发送请求
printf("pleasse send message:\n");
gets(buf_recv);
if(send(server,buf_recv,sizeof(buf_recv),0) == 0)
{
printf("send()failed:%d\n",WSAGetLastError());
exit(0);
}
closesocket(server); //关闭套接字
WSACleanup(); //关闭套接字库
}
}
//client.c
#include <Winsock.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(lib,"wsock32.lib")
#define PORT 12345
#define BUFFER 1024
void main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET client;
char buf_recv[BUFFER];
// char buf_send[BUFFER];
struct sockaddr_in serv;
// struct sockaddr_in client;
memset(buf_recv,0,sizeof(buf_recv));
// memset(buf_send,0,sizeof(buf_send));
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Winsock load failed\n");
exit(0);
}
//为地址结构体赋值
serv.sin_family=AF_INET; //地址族
serv.sin_port=htons(PORT); //服务端监听的端口
serv.sin_addr.s_addr=inet_addr("192.168.2.100"); //服务端的IP地址
client=socket(AF_INET,SOCK_STREAM,0); //创建 套接字
if(client==INVALID_SOCKET)
{
printf("socket failed:%d\n",WSAGetLastError());
exit(0);
}
//连接服务器
if(connect(client,(struct sockaddr*)&serv,sizeof(serv)) == INVALID_SOCKET)
{
printf("connet()failed:%d\n",WSAGetLastError());
exit(0);
}
printf("connect server sucessful!\n");
while(1)
{
//send发送请求
printf("pleasse send message!\n");
gets(buf_recv);
if(send(client,buf_recv,sizeof(buf_recv),0) == 0)
{
printf("send failed:%d\n",WSAGetLastError());
exit(0);
}
//recv读取消息
if(recv(client,buf_recv,sizeof(buf_recv),0) == 0)
{
printf("recv failed:%d\n",WSAGetLastError());
exit(0);
}
printf("recv data from server:%s\n",buf_recv);
closesocket(client); //关闭套接字
WSACleanup(); //关闭套接字库
}
}