linux系统
服务器端:
#define PROT 8888
#define BACKLOG 5
int main(int argc, char const *argv[])
{
int server_socket;
int client_socket;
struct sockaddr_in server_addr; // 服务器地址结构
// 这个地址用来保存来自客户端的连接,用在accept函数中
struct sockaddr_in client_addr; // 客户端地址结构
int err;
pid_t pid;
// 建立一个af_inet 域的流式套接字
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0)
{
std::cout << "create socket error " << std::endl;
return -1;
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PROT);
// 讲上述设置好的网络地址与套接字进行绑定
err = bind(server_socket, (sockaddr*)&server_addr, sizeof(server_addr));
if (err < 0)
{
std::cout << "bind server socket err [" << errno << "]: "<< strerror(errno) << std::endl;
return -1;
}
// 设置侦听队列,开始接收客户端的连接
std::cout << "start accept client request ..." << std::endl;
for(; ;)
{
int addrlen = sizeof(struct sockaddr_in);
// 如果没有客户端连接,就会阻塞在这里。
client_socket = accept(server_socket, (sockaddr*)&client_addr, &addrlen);
客户端:
#define PROT 8888
#define SERVER_IP "127.0.0.1"
int main(int argc, char const *argv[])
{
int s;
struct sockaddr_in server_addr;
int err;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
{
std::cout << "socket err:" << err << std::endl;
return -1;
}
// 设置要连接服务器的地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PROT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); //将网络地址字符串转化为二进制地址
// 连接服务器
// 将该套接字连接到 server_addr 指定的网络地址,一般是服务器地址。
std::cout << "start connect " << std::endl;
err = connect(s, (sockaddr*)&server_addr, sizeof(sockaddr));
if (-1 == err)
{
std::cout << "connect error[" << errno << "]:" << strerror(errno) << std::endl;
return -1;
}
错误信息:
每次运行server端,能运行起来。
截图:
此时启动客户端,就会提示如下:
服务器端还阻塞在accept这个函数,但是客户端直接就返回拒绝了
求解答。
4.
err = connect(s,(sockaddr*)&server_addr, sizeof(sockaddr));这句你仔细看看,最后一个sizeof里面的东西。改改差不多了应该,怎么能编译不报错呢,编译的时候加上-Wall试试,怎么能不报呢??
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。