问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux下建立socket的一点点小问题,求解

发布网友 发布时间:2022-05-10 21:50

我来回答

2个回答

热心网友 时间:2023-11-04 19:45

这是一个socket程序,基于tcp,是一个client客户端程序。
你需要一个对应的server服务端程序。
connect(s,&addr,sizeof(addr);这句话是去连接SERVER_IP所在的socket服务器。

以下是服务端代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define SERVPORT 3333 /*服务器监听端口号 */
#define BACKLOG 10 /* 最大同时连接请求数 */

int socket_init()
{
int fd;
struct sockaddr_in my_addr; /* 本机地址信息 */
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket创建出错!");
return -1;
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if (bind(fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
perror("bind出错!");
return -1;
}
if (listen(fd, BACKLOG) == -1) {
perror("listen出错!");
return -1;
}
return fd;
}

int main()
{
int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */
struct sockaddr_in remote_addr; /* 客户端地址信息 */
if((sockfd = socket_init()) < 0)
{
printf("init error!\n");
return -1;
}
printf("socket init ok, fd = %d\n", sockfd);
socklen_t sin_size = sizeof(struct sockaddr_in);

if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) {
perror("accept出错");
continue;
}
else
{
printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
break;
}
……//接下来就可以通过client_fd 和客户端进行TCP数据的收发。
}

注:服务端和客户端的端口号要一致。追问那请问这个服务器端的内容应该放在什么位置?
我现在有的环境是局域网内的多台Linux
这个服务器端程序编译通过之后生成的可执行文件应该放在服务器环境的哪个目录下,有什么环境要求吗?

追答随便哪个目录,运行server端之后,server端就会监听网口。
收到其他client端的connect连接请求时,就和client端通过TCP协议的三次握手,
建立连接。
然后两端就可以互相通讯了。send和recv。
如果你是多个client连接同一个server端,那么server端在accept这里,需要不停的接收连接请求,然后创建进程(fork函数)或者线程(pthread_create函数),来分别处理接收到的client。

热心网友 时间:2023-11-04 19:46

加 西嵌之家 技术交流群
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 总是会做噩梦,不知道为什么,这个梦谁可以给我解答一下寓意着什么?! 求解linux的socket程序,局域网里客户端无法连接到服务端 沈天庶梅樱小说的名字 总是做噩梦,不知道寓意着什么?谁能给解解啊! 最近刚学linux编程 有个问题想请教大家; 我按照网上socket教程写了个最简单的socket程序,但是怎么运行? 智齿是留着还是拔掉 最近经常做梦,而且梦的内容都跟一个人有关,这梦的寓意是什么? 智牙不拔,可以纠正吗? linux中socket编程服务端启动,客户端启动是出现错误:connection refuse(111) 不能启动socket,请检查是否已正确安装TCP/IP协议是怎么回事 长智齿牙龈肿痛,连脸都肿了,不管它会没什么事吗 牙齿长的几颗智齿都拥挤在一块,不管它会不会出问题 智齿和旁边的四颗牙活动了,是拔掉好,还是不管它呢?不能咀嚼食物,有时候很疼。 长智齿受阻,不管它会长出来吗 虎年十三字写给学生的春联 ios8.2怎么不越狱下载ons模拟器? 苹果手机越狱后在cyida中下载的机型模拟器没有什么危险吗? 求电脑PC端ios模拟器要越狱的那种软件 iOS版PPSSPP模拟器,越狱版(安装包deb格式)和免越狱版(安装包ipa格式)有什么区别?越 落地音箱 janey-J-03(丹麦产),8Ω,50W-180W。搭配什么牌子和型号的功放效果较好。 为什么我最近老做梦?还总梦到自己生活艰辛。。然后遇到了一些联系很少的人?有什么寓意么? 火车司机的妻子们小说txt全集免费下载 linux socket接收不到 做梦经常梦见同一个场景有什么寓意么? 沈天磊与杨菲这部小说的名字,在百度阅读上试读的,因为第二天忘记小说名子,怎么都找不到,只记得男女主 哪些情况下银行储户电话会被监管 伦敦金美盘几点开盘 天水八大碗都是什么菜 艺人虞书欣妈妈被限制消费,虞书欣工作室如何回应? 广东荣承体育用品制造有限公司怎么样? 虞书欣妈妈被*消费,虞书欣富二代称号被怀疑,工作室如何回应? 下列各项中,属于增值税征收范围的有( )。 惟廉者能约,己而爱人。这句话什么意思? 韩金美注册过商标吗?还有哪些分类可以注册? 关于清廉的名句 江苏金美电梯工程有限公司怎么样? 廉洁诗词 以廉洁为题材写议论文 600字 廉洁的意思是什么? 百度网盘改回创建时间