#include <iostream>
#include <WinSock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
int main()
{
char recvbuf[1024];
char sendbuf[1024];
WSADATA wsadata;
if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
{
cout << "wsastartup failed" << endl;
}
SOCKET server = socket(AF_INET, SOCK_STREAM, 0);
if (server == INVALID_SOCKET)
{
cout << "socket failed" << endl;
}
sockaddr_in seraddr;
seraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(6666);
int m = bind(server, (SOCKADDR*)&seraddr, sizeof(seraddr));
if (m != 0)
{
cout << "bind failed" << endl;
}
listen(server, 5);
cout << 1 << endl;
sockaddr_in client;
int len = sizeof(client);
SOCKET fd = accept(server, (sockaddr*)&client, &len);
cout << 2 << endl;
if (fd == INVALID_SOCKET)
{
cout << "accept failed" << endl;
}
cout << "请输入:" << endl;
cin >> sendbuf;
int l = send(fd, sendbuf, 1024, 0);
if (l < 0)
{
cout << "send failed" << endl;
}
else {
cout << "server 发送:" << sendbuf << endl;
}
int j = recv(fd, recvbuf, 1024, 0);
if (j < 0)
{
cout << "recv failed" << endl;
}
else {
cout << "server 收到:" << recvbuf << endl;
}
closesocket(server);
closesocket(fd);
WSACleanup();
return 0;
}
对于Socket通信先确保防火墙什么的关闭了,之后通信代码你尝试执行一下:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define SOCKET_PORT 8080
int main()
{
int serverfd;
if ((serverfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("socket create error\n");
return -1;
}
else
{
printf("socket create OK! \n");
}
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY; // IP 用通用的地址
servaddr.sin_port = htons(SOCKET_PORT); // 指定通信端口必须用 htons
if (-1 == bind(serverfd, (struct sockaddr *)&servaddr, sizeof(servaddr)))
{
printf("bind error\n");
close(serverfd);
return -1;
}
else
{
printf("bind OK! \n");
}
if (-1 == listen(serverfd, 5))
{
printf("listen error\n");
close(serverfd);
return -1;
}
else
{
printf("listen stauts OK! \n");
}
struct sockaddr_in clientaddr;
memset(&clientaddr, 0, sizeof(servaddr)); // 置零即可
unsigned int socklen = sizeof(clientaddr); // 类型为 unsigned int
printf("accept stauts before! \n");
int clientfd = accept(serverfd, (struct sockaddr *)&clientaddr, &socklen);
if (-1 == clientfd)
{
printf("accept error\n");
close(serverfd);
return -1;
}
else
{
printf("客户端(%s)已连接 \n", inet_ntoa(clientaddr.sin_addr));
}
char buffer[1024];
while (1)
{
int ret;
memset(buffer, 0, sizeof(buffer));
if ((ret = recv(clientfd, buffer, sizeof(buffer), 0)) <= 0)
{
printf("ret = %d \n", ret);
break;
}
printf("接收: %s \n", buffer);
strcpy(buffer, "recv client req OK");
if ((ret = send(clientfd, buffer, strlen(buffer), 0)) <= 0)
{
perror("send resp error");
break;
}
printf("发送: %s \n", buffer);
}
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define SOCKET_PORT 8080
int main()
{
int ret = 0;
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sockfd)
{
printf("socket error \n");
return -1;
}
else
{
printf("socket创建成功! \n");
}
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SOCKET_PORT); // htons
servaddr.sin_addr.s_addr = inet_addr("172.31.94.213"); // 换成你自己的ip
ret = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if (-1 == ret)
{
printf("connect error \n");
close(sockfd);
return -1;
}
else
{
printf("与服务端连接成功! \n");
}
char buffer[1024];
for (int data_cnt = 0; data_cnt < 10; data_cnt++)
{
memset(buffer, 0, sizeof(buffer));
sprintf(buffer, "创建第%d个socket通信,编号%03d \n", data_cnt + 1, data_cnt + 1);
if ((ret = send(sockfd, buffer, strlen(buffer), 0)) <= 0)
{
printf("send req error \n");
break;
}
else
{
printf("发送:%s \n", buffer);
}
if ((ret = recv(sockfd, buffer, sizeof(buffer), 0)) <= 0)
{
printf("ret = %d \n", ret);
break;
}
else
{
printf("接收: %s \n", buffer);
}
}
printf("socket通信完成!");
close(sockfd);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:定义
SOCKET
WSAAPI
accept(
_In_ SOCKET s,
_Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR * addr,
_Inout_opt_ int FAR * addrlen
);