欢迎来到天天文库
浏览记录
ID:43325102
大小:74.74 KB
页数:5页
时间:2019-09-30
《linux下java程序与C语言程序通过SOCKET通信的简单例子》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、[09.04.14]linux下java程序与C语言程序通过SOCKET通信的简单例子今天上午实验了java程序与c语言程序通过socket进行通信。由于没学过java,因此只是编写了C语言端的代码,java端的代码是从网上别的文章中找的,经过少量修改后与C语言端程序通信成功。本例中C语言端作为服务器Java端作为客户端代码如下:★★★★★★★★★★★★★★★ifserverprogram★★★★★★★★★★★★★★★★#includeincludeincludeinclude2、.h>includeinclude#include#includeintsockfd3newfd;void*read_socket();intmain(){intret;pthread_tread_tid,write_tid;structsockaddrinserveraddr;serveraddr.sini_family=AF_lNET;/*设置域为IPV4*/server_addr.sin_addr.s_addr=INADDR_ANY;/*绑定到INADDR_AN丫地址3、*/server_addr.sin_port=htons(5678);/*通信端口号为5678,注意这里必须要用htons函数处理一下,不能直接写5678,否则可能会连不上*/sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){printf("调用socket函数建立socket描述符出错!¥nn);exit(1);printf('调用socket函数建立socket描述符成功!¥nn);ret=bind(sockfd,(structsockaddr*)(&server_addr),sizeof(server_ad4、dr));perror(”server”);if(ret<0){printf(”调用bind函数绑定套接字与地址出错!¥n“);exit(2);}printf(”调用bind函数绑定套接字与地址成功!¥”');ret=listen(sockfd,4);if(ret<0){printf("调用listen函数出错,无法宣告服务器已经可以接受连接!¥n”);exit⑶;}printf(“调用listen函数成功,宣告服务器已经可以接受连接请求!¥n”);newfd=accept(sockfd5NULL,NULL);/*newfd连接到调用connect的客户端*/i5、f(newfd<0){printf("调用accept函数出错,无法接受连接请求,建立连接失败!¥nM);exit⑷;}printf(“调用accept函数成功,服务器与客户端建立连接成功!¥nH);r服务器端建立一个线程,负责从socket读取数据,当然此处并不一定非要建立一个新线程,直接在原线程中写也可以**/pthread_create(&read_tid,NULL,read_socket,NULL);/*****★*****★*********令原线程睡眠************************/while(1)sleep(10000);void6、*read_socket(){intrecv_nunvecv_num_total=0;charrecv_buf[50];while(1){memset(recv_buf,0,sizeof(recv_buf));/*清空一下recv_buf缓存区*7recv_num=recv(newfd,recv_buf,26,0);if(recv_num<0)printf(”服务器端:调用recv接收失败!¥n");elseif(recv_num>0){recvnumtotal+=recvnum;printf(”服务器端:调用recv接收成功!本次接收到%d个字节,内容为¥%s7、¥”。共收到%(1个字节的数据o¥n",recv_num,recv_buf,recv_num_totaI);sync();}els引*收到数据为0,表明服务器与客户端的连接已经中断*/{printf(“服务器端:与客户端的连接已中断当前共收到%d个字节的数据。服务器将再次等待客户端的连接o¥nH,recv_num_total);newfd=accept(sockfd,NULL,NULL);/*当客户端退出后,再次开始接收客户端的连接*/}sleep(1);*****************Clientprogram★★★★★★★★★★★★★★★★*/import8、java.net.*;i
2、.h>includeinclude#include#includeintsockfd3newfd;void*read_socket();intmain(){intret;pthread_tread_tid,write_tid;structsockaddrinserveraddr;serveraddr.sini_family=AF_lNET;/*设置域为IPV4*/server_addr.sin_addr.s_addr=INADDR_ANY;/*绑定到INADDR_AN丫地址
3、*/server_addr.sin_port=htons(5678);/*通信端口号为5678,注意这里必须要用htons函数处理一下,不能直接写5678,否则可能会连不上*/sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){printf("调用socket函数建立socket描述符出错!¥nn);exit(1);printf('调用socket函数建立socket描述符成功!¥nn);ret=bind(sockfd,(structsockaddr*)(&server_addr),sizeof(server_ad
4、dr));perror(”server”);if(ret<0){printf(”调用bind函数绑定套接字与地址出错!¥n“);exit(2);}printf(”调用bind函数绑定套接字与地址成功!¥”');ret=listen(sockfd,4);if(ret<0){printf("调用listen函数出错,无法宣告服务器已经可以接受连接!¥n”);exit⑶;}printf(“调用listen函数成功,宣告服务器已经可以接受连接请求!¥n”);newfd=accept(sockfd5NULL,NULL);/*newfd连接到调用connect的客户端*/i
5、f(newfd<0){printf("调用accept函数出错,无法接受连接请求,建立连接失败!¥nM);exit⑷;}printf(“调用accept函数成功,服务器与客户端建立连接成功!¥nH);r服务器端建立一个线程,负责从socket读取数据,当然此处并不一定非要建立一个新线程,直接在原线程中写也可以**/pthread_create(&read_tid,NULL,read_socket,NULL);/*****★*****★*********令原线程睡眠************************/while(1)sleep(10000);void
6、*read_socket(){intrecv_nunvecv_num_total=0;charrecv_buf[50];while(1){memset(recv_buf,0,sizeof(recv_buf));/*清空一下recv_buf缓存区*7recv_num=recv(newfd,recv_buf,26,0);if(recv_num<0)printf(”服务器端:调用recv接收失败!¥n");elseif(recv_num>0){recvnumtotal+=recvnum;printf(”服务器端:调用recv接收成功!本次接收到%d个字节,内容为¥%s
7、¥”。共收到%(1个字节的数据o¥n",recv_num,recv_buf,recv_num_totaI);sync();}els引*收到数据为0,表明服务器与客户端的连接已经中断*/{printf(“服务器端:与客户端的连接已中断当前共收到%d个字节的数据。服务器将再次等待客户端的连接o¥nH,recv_num_total);newfd=accept(sockfd,NULL,NULL);/*当客户端退出后,再次开始接收客户端的连接*/}sleep(1);*****************Clientprogram★★★★★★★★★★★★★★★★*/import
8、java.net.*;i
此文档下载收益归作者所有