这个也是在windowns用vs2015写的
- 服务器端代码
#include<WS2tcpip.h>
#include<winsock.h>
#include <stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest = MAKEWORD(1, 1);
int err;
err = WSAStartup(myVersionRequest, &wsaData);//在windowns上使用socket需要先注册,以上就是注册代码
if (!err)
{
printf("等待连接\n");
}
else
{
//进一步绑定套接字
printf("嵌套字未打开!");
return 0;
}
SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, 0);//创建了可识别套接字
SOCKADDR_IN peeraddr; //需要绑定的参数
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//ip地址
addr.sin_port = htons(1234);//绑定端口,端口一般比1024大,因为1-1024是常设端口
bind(serSocket, (SOCKADDR*)&addr, sizeof(SOCKADDR));//绑定完成
int lenth = sizeof(SOCKADDR);
int num = 0;
char buf[100];
char send[100];
num = recvfrom(serSocket, buf, 100, 0, (SOCKADDR*)&peeraddr, &lenth);
if (num < 0) {
printf("接收失败\n");
exit(1);
}
buf[num] = '\0';
printf("你接受来自ip地址为:%s,端口为:%d的消息:%s\n", inet_ntoa(peeraddr.sin_addr), htons(peeraddr.sin_port), buf);
sendto(serSocket, "欢迎来到2-1003皇家赌场!\n", 50, 0, (SOCKADDR*)&peeraddr, lenth);
while (1) {
memset(buf, 0, 100);
recvfrom(serSocket, buf, 101, 0, (SOCKADDR*)&peeraddr, &lenth);
buf[num] = '\0';
printf("你接受来自ip地址为:%s,端口为:%d的消息:%s\n", inet_ntoa(peeraddr.sin_addr), htons(peeraddr.sin_port), buf);
gets_s(send, 100);
sendto(serSocket, send, 50, 0, (SOCKADDR*)&peeraddr, sizeof(SOCKADDR));
memset(send, 0, 100);
if (!strcmp(buf, "bye")) {
break;
}
}
closesocket(serSocket);//关闭
WSACleanup();//释放资源的操作
return 0;
}
- 客户端代码
#include<WS2tcpip.h>
#include<winsock.h>
#include <stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc,char*argv[])
{
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest = MAKEWORD(1, 1);
int err;
err = WSAStartup(myVersionRequest, &wsaData);//在windowns上使用socket需要先注册,以上就是注册代码
if (!err)
{
printf("套接字打开成功\n");
}
else
{
//进一步绑定套接字
printf("嵌套字未打开!");
return 0;
}
SOCKET socketfd, num;
char buf[100];
SOCKADDR_IN server, peer;
socketfd = socket(AF_INET, SOCK_DGRAM, 0);
ZeroMemory(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
server.sin_port = htons(1234);
char s[50];
int len = sizeof(server);
while (1) {
gets_s(s, 50);
sendto(socketfd, s, 50, 0, (SOCKADDR*)&server, sizeof(server));
memset(s, 0, 50);
num = recvfrom(socketfd, buf, 101, 0, (SOCKADDR*)&peer, &len);
if (num < 0) {
printf("消息接收失败\n");
exit(1);
}
buf[num] = '\0';
printf("服务器消息:%s\n",buf);
if (!strcmp(buf, "bye")) {
break;
}
}
closesocket(socketfd);
WSACleanup();
return 0;
}
- 运行结果
服务器端:
客户端: