日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能

發布時間:2023/12/2 Ubuntu 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PERM S_IRUSR|S_IWUSR

#define MYPORT 5500 //宏定義,定義通信端口

#define BACKLOG 10

//宏定義,定義服務程序可以連接的最大客戶數量

#define WELCOME ?"|---------Welcome to the

chat room!----------|"

//宏定義,當客戶端連接到服務器時,向客戶發送此歡迎字符

//轉換函數,將int類型轉換成char*類型

void itoa(int i,char*string)

{

int power,j;

j=i;

for(power=1;j>=10;j/=10)

power*=10;

for(;power>0;power/=10)

{

*string++='0'+i/power;

i%=power;

}

*string='\0';

}

//得到當前系統的時間

void get_cur_time(char *time_str)

{

time_t timep;

struct tm *p_curtime;

char *time_tmp;

time_tmp = (char*)malloc(2);

memset(time_tmp,0,2);

memset(time_str,0,20);

time(&timep);

p_curtime = localtime(&timep);

strcat(time_str,"(");

itoa(p_curtime->tm_hour,time_tmp);

strcat(time_str,time_tmp);

strcat(time_str,":");

itoa(p_curtime->tm_min,time_tmp);

strcat(time_str,time_tmp);

strcat(time_str,":");

itoa(p_curtime->tm_sec,time_tmp);

strcat(time_str,time_tmp);

strcat(time_str,")");

free(time_tmp);

}

//創建共享存儲區

key_t shm_create()

{

key_t shmid;

if((shmid = shmget(IPC_PRIVATE,1024,PERM)) == -1)

{

fprintf(stderr,"Create Share Memory

Error:%s\n\a",strerror(errno));

exit(1);

}

return shmid;

}

//端口綁定函數,創建套件字,并綁定到指定端口

int bindPort(unsigned short int port)

{

int sockfd;

struct sockaddr_in my_addr;

sockfd = socket(AF_INET,SOCK_STREAM,0);//創建基于六套接字

my_addr.sin_family = AF_INET; //IPv4協議族

my_addr.sin_port = htons(port);//端口轉換

my_addr.sin_addr.s_addr = INADDR_ANY;

bzero(&(my_addr.sin_zero),0);

if(bind(sockfd,(struct

sockaddr*)&my_addr,sizeof(struct sockaddr)) ==

-1)

{

perror("bind");

exit(1);

}

printf("bind success!\n");

return sockfd;

}

void write_in_file(char* buf_in)

{

FILE *fp;

if((fp = fopen("/home/wbb/workspace/1.txt","a+")) ==

NULL)

{

printf("文件不能打開!\n");

exit(1);

}

fprintf(fp,"%s\n",buf_in);

fclose(fp);

}

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

{

socklen_t sockfd,clientfd,recvbytes;//定義監聽套接字、客戶套接字

socklen_t sin_size;

pid_t pid,ppid; //定義父子線程標記變量 pid_t == Process ID_Type

宏定義insigned int 類型

char *buf,*r_addr,*w_addr,*temp,*time_str; //定義臨時存儲區

struct sockaddr_in their_addr; //定義地址結構

key_t shmid;

shmid = shm_create(); //創建共享存儲區

temp = (char*)malloc(255);

time_str = (char*)malloc(20);

sockfd = bindPort(MYPORT); //綁定端口

while(1)

{

if(listen(sockfd,BACKLOG) == -1) //指定端口上監聽

{

perror("listen");

exit(1);

}

printf("listening......\n");

if((clientfd = accept(sockfd,(struct

sockaddr*)&their_addr,&sin_size))

== -1)

{

perror("accept");

exit(1);

}

printf("accept from:

%s\n",inet_ntoa(their_addr.sin_addr));

send(clientfd,WELCOME,strlen(WELCOME),0);//發送問候消息

buf = (char*)malloc(255);

ppid = fork();//創建子進程

if(ppid == 0)

{

pid = fork(); //創建子進程

while(1)

{

if(pid >0)

{

//父進程用于接收信息

memset(buf,0,255);

if((recvbytes =

recv(clientfd,buf,255,0))<=0)

{

perror("recv1");

close(clientfd);

raise(SIGKILL);

exit(1);

}

//write buf's data to share memory

w_addr = shmat(shmid,0,0);

memset(w_addr,'\0',1024);

strncpy(w_addr,buf,1024);

get_cur_time(time_str);

strcat(buf,time_str);

printf("接收的:%s\n",buf);

write_in_file(buf);

}

else if(pid == 0)

{

//子進程用于發送信息

//scanf("%s",buf);

sleep(1);

r_addr = shmat(shmid,0,0);

if(strcmp(temp,r_addr)!=0)

{

strcpy(temp,r_addr);

get_cur_time(time_str);

strcat(r_addr,time_str);

if(send(clientfd,r_addr,strlen(r_addr),0) == -1)

{

perror("send");

}

memset(r_addr,'\0',1024);

strcpy(r_addr,temp);

}

}

else

perror("fork");

}

}

}

printf("------------------------\n");

free(buf);

close(sockfd);

close(clientfd);

return 0;

}

客戶端代碼:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。