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的三次握手协议来写的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)