#include<winsock2.h>
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"WS2_32.lib")
int main()
{
WSADATA wsadata;
WORD w=MAKEWORD(2,0);
char sztext[60]="大赛 欢迎你 呵呵顶服务器\r\n";
::WSAStartup(w, &wsadata);//初始化套接字库 不相干只有一次
SOCKET socket_0, socket_1;
socket_0 = ::socket(AF_INET, SOCK_STREAM, 0);//创建套接字sock_s0 返回句柄
sockaddr_in sockaddr_in_1, sockaddr_in_2;
int n = sizeof(sockaddr_in_2);
sockaddr_in_1.sin_family = AF_INET;
sockaddr_in_1.sin_port = htons(75);//75端口
sockaddr_in_1.sin_addr.S_un.S_addr = INADDR_ANY;
::bind(socket_0, (sockaddr*)&sockaddr_in_1, sizeof(sockaddr_in_1));//绑定sock_s0
::listen(socket_0, 2);//监听sock_s0
printf("服务器已经启动\r\n");
while(true)
{
socket_1 = ::accept(socket_0, (sockaddr*)&sockaddr_in_2, &n);//connect相对
// 在sock_s0 同意接受 给sockaddr_in_2赋值 直线sock_s1是客户端的
if (socket_1 != NULL)
{
printf("%s已经连接上 循环遍历到\r\n", inet_ntoa(sockaddr_in_2.sin_addr));
::send(socket_1, sztext, sizeof(sztext), 0);//往客户端套接字发送数据recv相对
}
::closesocket(socket_0);
::closesocket(socket_1);
::WSACleanup();//释放 初始化
if(getchar()) //如果有输入则关闭程序
{
return 0; //正常结束程序
}
else
{::Sleep(100);
}
}}
客户端
#include<winsock2.h> //包含头文件
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"WS2_32.lib") //显式连接套接字库
int main() //主函数开始
{
WSADATA wsadata; //定义WSADATA结构体对象
WORD w=MAKEWORD(2,0); //定义版本号码
::WSAStartup(w, &wsadata); //初始化套接字库
SOCKET socket_1; //定义连接套接字和数据收发套接字句柄
char sztext[60]={0};
socket_1 = ::socket(AF_INET, SOCK_STREAM, 0); //创建TCP套接字
sockaddr_in sockaddr_in_1; //定义套接字地址结构
sockaddr_in_1.sin_family = AF_INET; //初始化地址结构
sockaddr_in_1.sin_port = htons(75);//端口
sockaddr_in_1.sin_addr.S_un.S_addr = inet_addr("192.168.65.130");//127.0.0.1
printf("客户端已经启动\r\n"); //输出提示信息
::connect(socket_1, (sockaddr*)&sockaddr_in_1, sizeof(sockaddr_in_1));//连接accept相对
::recv(socket_1, sztext, sizeof(sztext), 0);//本地套接字接收send相对
printf("本地接收到 %s\r\n",sztext);
::closesocket(socket_1); //关闭套接字句柄
::WSACleanup(); //释放套接字库
if(getchar())
{
return 0; //正常结束程序
}
else
{::Sleep(100);
}
}