linux java socket编程_linux下java程序与C语言程序通过SOCKET通信的简单例子
#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);/*通信端口號為5678,注意這里必須要用htons函數處理一下,不能直接寫5678,否則可能會連不上*/
sockfd=socket(AF_INET,SOCK_STREAM,0);
if (sockfd<0)
{
printf("調用socket函數建立socket描述符出錯!\n");
exit(1);
}
printf("調用socket函數建立socket描述符成功!\n");
ret=bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(server_addr));
perror("server");
if (ret<0)
{
printf("調用bind函數綁定套接字與地址出錯!\n");
exit(2);
}
printf("調用bind函數綁定套接字與地址成功!\n");
ret=listen(sockfd,4);
if (ret<0)
{
printf("調用listen函數出錯,無法宣告服務器已經可以接受連接!\n");
exit(3);
}
printf("調用listen函數成功,宣告服務器已經可以接受連接請求!\n");
newfd=accept(sockfd,NULL,NULL);/*newfd連接到調用connect的客戶端*/
if (newfd<0)
{
printf("調用accept函數出錯,無法接受連接請求,建立連接失敗!\n");
exit(4);
}
printf("調用accept函數成功,服務器與客戶端建立連接成功!\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("服務器端:調用recv接收失敗!\n");
else if(recv_num>0)
{
recv_num_total+=recv_num;
printf("服務器端:調用recv接收成功!本次接收到%d個字節,內容為:\"%s\"。共收到%d個字節的數據。\n",recv_num,recv_buf,recv_num_total);
sync();
}
else/*收到數據為0,表明服務器與客戶端的連接已經中斷*/
{
printf("服務器端:與客戶端的連接已中斷,當前共收到%d個字節的數據。服務器將再次等待客戶端的連接。\n",recv_num_total);
newfd=accept(sockfd,NULL,NULL);/*當客戶端退出后,再次開始接收客戶端的連接*/
}
sleep(1);
}
}
總結
以上是生活随笔為你收集整理的linux java socket编程_linux下java程序与C语言程序通过SOCKET通信的简单例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java web配置dll文件_Java
- 下一篇: linux 文件操作 编程,Linux系