linux下,socket服务器和客户端TCP方式建立了连接,如何使它们之间相互发送消息?

linux下,socket服务器和客户端TCP方式建立了连接,如何使它们之间相互发送消息?,第1张

1.可能是在获取客户端的ip和端口时,处理出现问题,导致无法正确发送到客户端。

2.客户辩改清端是否使用固定的端口来接收服务器信息,或服务器是否正确发送到客户端的相应的端口。

3.通过上面分析,最大可能是在处理端歼物口出现问题,请重新检查。

4.实在不行,最好使用抛出异常方法来捕获错误消息,或携前是通过一步一步调试分析数据发送过程。

server端:

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include<string.h>

#include <ctype.h>

#include <sys/socket.h>

#include <arpa/inet.h>

#define MAX_LINE 100

int main()

{

struct sockaddr_in server

struct sockaddr_in client

int server_fd

int client_fd

socklen_t len

char buf[MAX_LINE]//用于存储传送内容到缓冲区

char addr_ip[INET_ADDRSTRLEN]//存储客户端地址缓冲区

int port = 8000//端口号8000

int n//读写字节数

bzero(&server,sizeof(server))//清空地址结构

server.sin_family = AF_INET//使用ipv4

server.sin_addr.s_addr = INADDR_ANY//服务器可以接受任意地址

server.sin_port = htons(port)//把派陪端口号转成网络字节序

server_fd = socket(AF_INET,SOCK_STREAM,0)//创立套接衡羡察字,使用tcp协议

bind(server_fd,(struct sockaddr *)&server,sizeof(server))//将地址和套接字绑定

listen(server_fd,10)//开始监听

printf("waiting```\n")

while(1)

{

client_fd = accept(server_fd,(struct sockaddr *)&client,&len)

n = read(client_fd,buf,MAX_LINE)//读取客户端来的消息

inet_ntop(AF_INET,&client.sin_addr,addr_ip,sizeof(addr_ip))

printf("client ip is : %s , port is : %d\n",addr_ip,ntohs(client.sin_port))

printf("content is : %s\n",buf)//打印客户端信息

write(client_fd,buf,n)//转发回去给客户端

close(client_fd)

}

if(close(client_fd) == -1)

{

perror("fail to close")

exit(1)

}

return 0

}

client端:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <arpa/inet.h>咐茄

#define MAX_LINE 100

int main(int argc,char * argv[])

{

struct sockaddr_in server//服务器地址

char buf[MAX_LINE]

int server_fd

int port = 8000

char *str = "test string"//默认字符串

if(argc >1)

{

str = argv[1]//从命令参数中取得用户输入的串

}

bzero(&server,sizeof(server))//清空地址结构

server.sin_family = AF_INET//使用ipv4

inet_pton(AF_INET,"192.168.228.129",&server.sin_addr)

server.sin_port = htons(port)

server_fd = socket(AF_INET,SOCK_STREAM,0)//创建套接字

connect(server_fd,(struct sockaddr *)&server,sizeof(server))

write(server_fd,str,strlen(str) + 1)

//因为是本机测试,所以不用考虑延时

read(server_fd,buf,MAX_LINE)

printf("recieve from server :%s\n",buf)

close(server_fd)

return 0

}

//源码来自于网络,谁写也都类似,都是基于tcp的三次握手协议来写的


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12514825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存