突然想以後學程式設計搞軟體了,剛開始學程式設計,看了劉學勇、陳建偉老師出版的《精通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...