這幾天的socket程式設計

2021-08-10 02:48:17 字數 2563 閱讀 6189

突然想以後學程式設計搞軟體了,剛開始學程式設計,看了劉學勇、陳建偉老師出版的《精通linux》程式設計,開始嘗試自己編寫socket,**有很多參考劉老師的書和甘剛老師《linux/unix網路程式設計》,出現了很多問題,現在記錄下來。使用vmware的虛擬機器,centos6的作業系統,新手學習,還是菜鳥,求輕噴,也請大家多指教。

**如下:

伺服器部分:

#include

#include

#include

#include

#include

#include

#include

#define listenq 5

#define maxline 10

int main()

//printf("1");

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family=af_inet;

servaddr.sin_port=htons(8080);

servaddr.sin_addr.s_addr=htonl(inaddr_any);

if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)

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

listen(sockfd,listenq);

len=sizeof(cliaddr);

if((connfd=accept(sockfd,null,null))==-1)

//    printf("it is %d\n",connfd);

printf("you got a connection from %s,port is %d\n",inet_ntoa(cliaddr.sin_addr),htons(cliaddr.sin_port));

memset(buff,0,maxline);

fgets(buff,maxline,stdin);

if(send(connfd,buff,maxline,0)<0)

buff[n-1]='\0';

//        printf("send error %s");

//    send(connfd,"welcome\n",8,0);

close(connfd);

close(sockfd);

return 0;

}客戶端部分:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxline 10

int main(int argc,char **argv)

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family=af_inet;

servaddr.sin_port=htons(8080);

//  servaddr.sin_addr.s_addr=htonl(inaddr_any);

if(inet_aton(argv[1],(struct in_addr *)&servaddr.sin_addr)==0)

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

if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)

//  fgets(buff,maxline,stdin);

//  n=write(sockfd,buff,strlen(buff));

//  buff[n]='\0';

if((n=recv(sockfd,buff,maxline,0))==-1)

buff[n-1]='\0';

printf("receive: %s\n",buff);

close(sockfd);

return 0;

}沒有養成乙個寫注釋的好習慣,從今以後注意!其中很多加「//」的地方都是為了除錯方便新增的,因為gdb用的還不是很熟練。跑題了,該程式是實現了乙個伺服器向客戶端傳送任何一句話,客戶端接收並顯示的功能,除錯了好久,雖然最終還是有些許bug,但還算是基本實現功能。

遇到的問題

1、執行gcc service.o -o service 時候,鏈結出錯!第一次出錯是因為我使用 bzero()函式把陣列給置零,有多蠢!人家不是用來幹那事的!第二次出錯是我在執行gcc -c service.c -o service.o 的時候沒有加-c引數,沒有進行編譯,出的錯我腦袋都大了,一直提示找不到main的入口函式,總算是運氣好,把錯找出來了,要不真的欲哭無淚。

3、上邊的segmentation fault解決之後,又出現了新的segmentation fault,看了好多大神說可以用gdb調core檔案看,但真心不是我的水平,出現的棧位址都不知所云,但我通過總結,知道大體是指標錯誤,而且就出在陣列上,於是我給陣列在使用之前先全都置0,也就是  memset(buff,0,maxline);問題真的解決了。

回家這幾天

1.硬碟錄影機聯網 沒有無線上網功能,其實我在想能不能通過編譯無線驅動,從系統的層面來解決,這樣是最省資金的 剛好手上有raspi 所以計畫是樹莓派無線網絡卡上網然後共享網路到lan,貼吧有一篇文章,一開始是可以的,但後來就一直失敗,也不知道為何。網上關於這個的教程少,加之網路方面,閘道器啥的不太熟...

過年這幾天

這幾天在家過年,一點不想搞科研。就想著徹底放縱下,然後到學校裡有足夠的勁頭投入到學習上。放假前的那幾天學習效率太低了,畢竟忙了一學期,是時候換換腦子了。今天無意中開啟了jors的 發現 的一審已經結束了,正在等編輯處理意見。心中非常忐忑,自己又開啟 看了一遍,猜猜審稿人可能會提出什麼意見。那個證明部...

集訓這幾天

day1 第一天接著做之前的斜優 好像對斜優理解更深了一點 就是看大於小於然後維護乙個凸包 單調佇列在這應用也挺廣泛的 斜優最重要的還是移項吧我覺得的 這個對於找斜率很重要啦 下午開了尤拉函式,拓展歐幾裡的 這個還是比較簡單 day2 上午就把歐幾裡的給a完了 下午開的組合數學 難死 0000000...