客户端c 服务器端java_java与c语言之间的socket通信—java客户端c服务器端 | 学步园...

该博客介绍了一个使用C语言编写的服务器端程序,通过监听5678端口等待客户端连接。当客户端连接成功后,服务器端会创建一个线程来读取客户端发送的数据,并在接收到数据时进行打印。程序提供了错误处理机制,如socket创建、bind、listen及accept失败时退出程序。
摘要由CSDN通过智能技术生成

首先是server.c:

#include

#include

#include

#include

#include

#include

#include

#include

int sockfd,newfd;

void *read_socket();

int main()

{

int ret;

pthread_t read_tid,write_tid;

struct sockaddr_in server_addr;

server_addr.sin_family=AF_INET; // 设置域为IPV4

server_addr.sin_addr.s_addr=INADDR_ANY;// 绑定到 INADDR_ANY 地址

server_addr.sin_port=htons(5678);// 注意端口转换

sockfd=socket(AF_INET,SOCK_STREAM,0);

if (sockfd<0)

{

exit(1);// 调用socket函数建立socket描述符出错

}

ret=bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(server_addr));

perror("server");

if (ret<0)

{

exit(2);// 调用bind函数绑定套接字与地址出错

}

ret=listen(sockfd,4);

if (ret<0)

{

exit(3);// 调用listen函数出错

}

printf("等待客户端连接!\n");

newfd=accept(sockfd,NULL,NULL);

if (newfd<0)

{

exit(4);// 建立连接失败!

}

printf("服务器与客户端建立连接成功!\n");

// 建立一个线程,负责从socket读取数据

pthread_create(&read_tid,NULL,read_socket,NULL);

while(1)

{

sleep(10000);

}

}

// 从socket读取数据

void *read_socket()

{

int recv_num,recv_num_total=0;

char recv_buf[50];

while (1)

{

memset(recv_buf,0,sizeof(recv_buf));// 清空一下recv_buf缓存区

recv_num=recv(newfd,recv_buf,26,0);

if (recv_num<0)

printf("服务器端接收失败!\n");

else if(recv_num>0)

{

recv_num_total+=recv_num;

printf("服务器端:调用接收成功!内容为:%s\n共收到%d个字节的数据。\n",recv_buf,recv_num_total);

sync();

}

else

{

printf("服务器端与客户端的连接已中断\n");

printf("等待客户端连接!\n");

newfd=accept(sockfd,NULL,NULL);

}

sleep(1);

}

}

代码中的5678是服务器端端口号,客户端需要通过这个端口号与服务器端通信;

运行:在ubuntu中输入命令:gcc -o server server.c 回车,然后 ./server 回车

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值