TCP服务器端
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include "winsock2.h"
#include<cstdlib>
//#define _M_AXP64 //在头文件里定义该宏
//#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
//using namespace std;
#define MY_ERROR -1
int main()
{
WSADATA wsa;/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1, 1), &wsa) != 0)
{
return MY_ERROR;
}
SOCKET Server_Sock = socket(AF_INET, SOCK_STREAM, 0);
if (Server_Sock == INVALID_SOCKET)
{
std::cout << "create error ";
}
SOCKADDR_IN serverAddr;
ZeroMemory((char*)&serverAddr, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8888);//注意端口是否已经被占用
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
int res =bind(Server_Sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));//serverAddr 是本端地址,要bind,让客户端知道要传输的地址是哪个。
if (res!=0)
{
return false;
}
int lis = listen(Server_Sock, 5);//sockefd指定被监听的socket
if (lis != 0)
{
return false;
}
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SOCKET sockConn;
sockConn = accept(Server_Sock, (SOCKADDR*)&addrClient, &len);
while (1)
{
char recvBuf[50];
recv(sockConn, recvBuf, 50, 0);
printf("%s\n", recvBuf);
send(sockConn, "ok", 2, 0);
memset(recvBuf, 0, 50);
}
closesocket(sockConn);
return 0;
}
TCP客户端
#include <stdio.h>
#include <Winsock2.h>
#include<stdio.h>
#define MY_ERROR -1
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return MY_ERROR;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1) {
WSACleanup();
return 0;
}
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sockClient)
{
std::cout << "create socket error" << std::endl;
}
SOCKADDR_IN addrSrv; //serverAddr.sin_addr.s_addr
// InetPton(AF_INET, CString(addr.c_str()), &addrSrv.sin_addr);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(8888);
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//IP地址
/* inet_addr 编译不通过就设置SDV改成否试试,这是版本问题*/
int res = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
{
if (res != 0)
{
std::cout << "connect error";
}
}
char buff[128] = {0};
char recv_buff[128] = { 0 };
const char * comp = "exit";
std::string s1;
while(1)
{
gets_s(buff, 128);
if (memcmp(buff, comp, 4) == 0)//strncmp(buff,"exit",4)==0
{
break;
}
send(sockClient, buff, strlen(buff) + 1, 0);
recv(sockClient, recv_buff, 50, 0);
std::cout << recv_buff << std::endl;
memset(buff, 0, 128);
}
closesocket(sockClient);
WSACleanup();
return 0;
}
UDP通讯
服务器端
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include "winsock2.h"
#include<cstdlib>
//#define _M_AXP64 //在头文件里定义该宏
//#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
//using namespace std;
#define MY_ERROR -1
int main()
{
WSADATA wsa;/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1, 1), &wsa) != 0)
{
return MY_ERROR;//代表失败
}
SOCKET Server_Sock = socket(AF_INET, SOCK_DGRAM ,0);
if (Server_Sock == INVALID_SOCKET)
{
std::cout << "Shezhishibai ";
}
SOCKADDR_IN serverAddr;
ZeroMemory((char*)&serverAddr, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8888);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
int res = bind(Server_Sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
if (res != 0)
{
return -1;
}
/*int lis = listen(Server_Sock, 5);
if (lis != 0)
{
return -1;
}*/
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
//SOCKET sockConn;
//sockConn = accept(Server_Sock, (SOCKADDR*)&addrClient, &len);
while (1)
{
//sprintf(sendBuf, "Welcome %s to here!", inet_ntoa(addrClient.sin_addr));
//send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
char recvBuf[50];
recvfrom(Server_Sock, recvBuf, 50, 0, (SOCKADDR*)&addrClient,&len );
printf("%s\n", recvBuf);
//send(sockConn, "ok", 2, 0);
//memset(recvBuf, 0, 50);
}
closesocket(Server_Sock);
return 0;
}
UDP客户端
#include <stdio.h>
#include <Winsock2.h>
#include<stdio.h>
#define MY_ERROR -1
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return MY_ERROR;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1) {
WSACleanup();
return 0;
}
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockClient)
{
std::cout << "create socket error" << std::endl;
}
SOCKADDR_IN addrSrv; //serverAddr.sin_addr.s_addr
int len = sizeof(addrSrv);
// InetPton(AF_INET, CString(addr.c_str()), &addrSrv.sin_addr);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(8888);
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//IP地址
//SOCKADDR_IN addrClient;
int res = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
{
if (res != 0)
{
std::cout << "connect error";
}
}
char buff[128] = { 0 };
char recv_buff[128] = { 0 };
const char* comp = "exit";
std::string s1;
while (1)
{
//std::cin >> s1;
gets_s(buff, 128);
if (memcmp(buff, comp, 4) == 0)//strncmp(buff,"exit",4)==0
{
break;
}
sendto(sockClient, buff, strlen(buff) + 1, 0, (SOCKADDR*)&addrSrv,len);
//recvfrom(sockClient, recv_buff, 50, 0, (SOCKADDR *)&addrSrv,&len);
//std::cout << recv_buff << std::endl;
memset(buff, 0, 128);
}
// recv(sockClient, buff, 50, 0);
//printf("%s\n", recvBuf);
closesocket(sockClient);
WSACleanup();
return 0;
}