先安裝screen 先
看是要apt 還是yum 不管反正裝起來就是了.
使用
screen 之後就進入一個process這時候用ps wx 可以看到screen的process開了一些先的 process
這時候如果執行了一些程式正在跑
按下ctrl + a 然後 ctrl +d 就會跳到原本的狀態
最後是screen -r 就可以回到剛剛的process
好玩吧.
如果有很多個的時候
screen -r 後面加上他列出來的序號
就可以轉過去了..
好用!!
星期二, 1月 30, 2007
MindManager
Mindmanager
有時候在想東西時會覺得紙似乎不好用嗎?還是覺得自己畫的圖會有點醜?現在介紹這一套,創意開發軟體,就是幫忙你,更好發揮您的想法,他利用圖形的方式表達,能很清楚的顯示出您的思為.
你有看過族譜吧?這套軟體可以輕易的畫出類似的樣圖,像金屬歷史那樣複雜的歷史關係也能輕易的畫出,就是這樣有不少人不小心著迷了呦.
下面是截圖,看官可以參考參考.



不知道為啥我NB裝不起來呀?真怪.
有時候在想東西時會覺得紙似乎不好用嗎?還是覺得自己畫的圖會有點醜?現在介紹這一套,創意開發軟體,就是幫忙你,更好發揮您的想法,他利用圖形的方式表達,能很清楚的顯示出您的思為.
你有看過族譜吧?這套軟體可以輕易的畫出類似的樣圖,像金屬歷史那樣複雜的歷史關係也能輕易的畫出,就是這樣有不少人不小心著迷了呦.
下面是截圖,看官可以參考參考.



不知道為啥我NB裝不起來呀?真怪.
phpMyAdmin
執行下列動作前~請先確定您建立了 MySQL 管理使用者,請參考[教學]phpMyAdmin 建立 MySQL 管理者
為了避免您的 phpMyAdmin 門戶大開,請務必要修改您的 phpMyAdmin 登入 config 檔,防止外人進入您的 mysql 造成資料庫被刪除的危機。
首先,打開 phpMyAdmin/config.inc.php
找到
代碼:
$cfg['PmaAbsoluteUri'] =
請在等號的後方填入您的 phpMyAdmin 路徑,例如:
代碼:
$cfg['PmaAbsoluteUri'] = 'http://takeneko.no-ip.com/phpMyAdmin/';
接下來,修改成為限定登入的方式,找到
代碼:
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname
這個是您的 MySql 的伺服器名稱,如果您是使用網路空間,請洽詢您的網路空間提供商,所提供的 MySql 的伺服器名稱,假如您是架設在 Windows 系統(非 Server 系列)之上,通常為 localhost。
然後,找到下面兩段語法:
代碼:
$cfg['Servers'][$i]['controluser'] = 'xxxxxx'; // MySQL control user settings
// (this user must have read-only
紅色xxxxxx輸入您的 MySql 管理帳號
$cfg['Servers'][$i]['controlpass'] = 'xxxxxx'; // access to the "mysql/user"
// and "mysql/db" tables)
紅色xxxxxx輸入您的 MySql 管理密碼
最後要以瀏覽器開啟登入畫面的設定,找到:
代碼:
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
竹貓
把預設的 config 修改成紅色字體的 http,還有紅色字體的 root 移除,接著儲存檔案關閉就可以了。
代碼:
$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
為了避免您的 phpMyAdmin 門戶大開,請務必要修改您的 phpMyAdmin 登入 config 檔,防止外人進入您的 mysql 造成資料庫被刪除的危機。
首先,打開 phpMyAdmin/config.inc.php
找到
代碼:
$cfg['PmaAbsoluteUri'] =
請在等號的後方填入您的 phpMyAdmin 路徑,例如:
代碼:
$cfg['PmaAbsoluteUri'] = 'http://takeneko.no-ip.com/phpMyAdmin/';
接下來,修改成為限定登入的方式,找到
代碼:
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname
這個是您的 MySql 的伺服器名稱,如果您是使用網路空間,請洽詢您的網路空間提供商,所提供的 MySql 的伺服器名稱,假如您是架設在 Windows 系統(非 Server 系列)之上,通常為 localhost。
然後,找到下面兩段語法:
代碼:
$cfg['Servers'][$i]['controluser'] = 'xxxxxx'; // MySQL control user settings
// (this user must have read-only
紅色xxxxxx輸入您的 MySql 管理帳號
$cfg['Servers'][$i]['controlpass'] = 'xxxxxx'; // access to the "mysql/user"
// and "mysql/db" tables)
紅色xxxxxx輸入您的 MySql 管理密碼
最後要以瀏覽器開啟登入畫面的設定,找到:
代碼:
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
竹貓
把預設的 config 修改成紅色字體的 http,還有紅色字體的 root 移除,接著儲存檔案關閉就可以了。
代碼:
$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
SCim
SCIM 也是現在很多人用的輸入法,最有名的就是裡面的「酷音」吧。
請先安裝以下套件:
# sudo apt-get install scim
# sudo apt-get install scim-chinese
# sudo apt-get install scim-config-socket
# sudo apt-get install scim-gtk2-immodule
# sudo apt-get install scim-tables-zh
接著編輯 ~/.gnomerc 加上
export LANG=zh_TW.UTF-8
export LC_CTYPE=zh_TW.UTF-8export
XMODIFIERS="@im=SCIM"
export GTK_IM_MODULE="scim"
export XIM_PROGRAM="scim -d"
export QT_IM_MODULE="scim"
scim -f x11 -d
scim -f socket -d
阿駕
請先安裝以下套件:
# sudo apt-get install scim
# sudo apt-get install scim-chinese
# sudo apt-get install scim-config-socket
# sudo apt-get install scim-gtk2-immodule
# sudo apt-get install scim-tables-zh
接著編輯 ~/.gnomerc 加上
export LANG=zh_TW.UTF-8
export LC_CTYPE=zh_TW.UTF-8export
XMODIFIERS="@im=SCIM"
export GTK_IM_MODULE="scim"
export XIM_PROGRAM="scim -d"
export QT_IM_MODULE="scim"
scim -f x11 -d
scim -f socket -d
阿駕
Gentoo 練習
- /etc/init.d/sshd start 打開 ssh server
- /etc/runlevels/ //開機啟動
- nano -w /etc/resolv.conf 裡面也DNS的設定
- nano -w /etc/make.conf 放置編譯參數
- nano -w /etc/modules.autoload.d/kernel-2.6 需要把網路卡先加上去 //設定模組您將需要將想要開機時自動載入的模組放到
- nano -w /etc/fstab 磁碟機掛載設定
- vi /etc/fonts/fonts.conf
- nano -w /etc/conf.d/net 網路卡設定
- nano -w /etc/hosts 寫入網路資訊
- nano -w /etc/rc.conf 系統資訊 <---KDE要在這邊設定
- /etc/X11/xorg.conf X的設定檔 <-- 滑鼠也要在這設
export 環境變數...有時會需要
如果開機要加入x 就要rc-update -a xdm default
/usr/portage/app-i18n/scim
http://www.gentoo.org.tw/proj/ebuild/ebuild.xml //最佳化中文
/ .bashrc // 加入中文參數 export LANG="zh_TW.Big5"
export LC_ALL="zh_TW.Big5"gcin 安裝 /kde/autostart ln /usr/bin/gcin
export XMODIFIERS="@im=SCIM"
startkde
中文字型 /etc/fonts/fonts.conf 加入
ACCEPT_KEYWORDS="~x86" emerge
lsmod //看使用中的drvier
lspci //查硬體資料
安裝音效卡 之後在 /etc/modules.autoload.d/kernel-2.6 裡加上開機啟動
snd_intel8x0
snd_mixer_oss
snd_pcm_oss
qpkg -l 安裝套件資料......
打開無線網路
modprobe ath_pciiwconfig ath0 essid default
ln -s net.eth- net.ath0
./net.ath0 start
vi /etc/conf.d/net <---加無線的dhcp
dmsg
lspci 要安裝 pciutils
root的顏色 cp /etc/skel/ *.* 到root裡來..就ok之後在source .bashrc
USE="cjk nls arts kde qt ssl scim zh_TW X dvd alsa cdr"
consol看中文locale
emerge fam //
acpid 管理notebook上按鍵
Linux SSH 程式 SCREEN
rc-update add sshe default (設定起動開起)
/etc/init.d/sshd start (打開sshd)
如果要連上不同帳號 sssh Hisashi@140.130.13.114
如果不用之就直接 ssh 140.130.13.114 幾即可
ssh sreen -R Ctrl +a +d or Ctrl +a +c
/etc/init.d/sshd start (打開sshd)
如果要連上不同帳號 sssh Hisashi@140.130.13.114
如果不用之就直接 ssh 140.130.13.114 幾即可
ssh sreen -R Ctrl +a +d or Ctrl +a +c
如何 Register ?
REGSVR32 /u C:\DXSDK\Samples\C++\DirectShow\Filters\Dump\Debug_Unicode\dump.ax
/u是解除
如這行指令就能註冊了...
如果還要更方便就要修改
工具=>資料夾選項=>檔案類型=> 加一個新的檔案類型
執行動作: 名稱
用來執行動作的應用程式 C:\WINDOWS\system32\regsvr32.exe /u "%1"
這樣就完成了!! 之後按右鍵就會出現了趣的事了
/u是解除
如這行指令就能註冊了...
如果還要更方便就要修改
工具=>資料夾選項=>檔案類型=> 加一個新的檔案類型
執行動作: 名稱
用來執行動作的應用程式 C:\WINDOWS\system32\regsvr32.exe /u "%1"
這樣就完成了!! 之後按右鍵就會出現了趣的事了
Director SDK 環境 設定
安裝Director SDK 後
編譯Direct show
X:\DXSDK\Samples\C++\DirectShow\BaseClasses
編譯baseclasses.dsp檔
進Visual C++後 打開 Build=>set Active Configure
選取Debug 和 Debug Release 編譯後會產生
Strmbase.lib 和 Strmbase.lib 之後把這兩檔案放至 X:\DXSDK\Lib
在把所有的 .H檔放在 C:\DXSDK\Include方便以後使用
要把Strmbase.lib 和 Strmbase.lib 註冊一下
之後就可以打開GraphEdit了
編譯Direct show
X:\DXSDK\Samples\C++\DirectShow\BaseClasses
編譯baseclasses.dsp檔
進Visual C++後 打開 Build=>set Active Configure
選取Debug 和 Debug Release 編譯後會產生
Strmbase.lib 和 Strmbase.lib 之後把這兩檔案放至 X:\DXSDK\Lib
在把所有的 .H檔放在 C:\DXSDK\Include方便以後使用
要把Strmbase.lib 和 Strmbase.lib 註冊一下
之後就可以打開GraphEdit了
(接)重灌gentoo
一個字...蠢...沒有DNS MIRRORS又怎麼出現啦....耍白吃勒...
忘東忘西的各性呀..><" 這次在/etc/make.conf 多加了USE參數..hmm "cjk nls " 一定要加外多加了 kde dvd 幾個..hmm...
我就是從錯誤中學習...
之後就一連串的到了裝核心的時候了...
http://dev.gentoo.org/~brix/papers/X31/X31.html
這勒...有x31的相關說明...有前輩已經搞出了點東西
可以抄一抄...
把dotconfig copy 到 usr/src/linux-x 下的.config
在make menuconfig 存一下..多補些東西
hmm
make就ok了....
不過要先研讀好...核心設定...不然編出來的可能只是白編了
http://www.study-area.org/linux/system/linux_kernel.htm
忘東忘西的各性呀..><" 這次在/etc/make.conf 多加了USE參數..hmm "cjk nls " 一定要加外多加了 kde dvd 幾個..hmm...
我就是從錯誤中學習...
之後就一連串的到了裝核心的時候了...
http://dev.gentoo.org/~brix/papers/X31/X31.html
這勒...有x31的相關說明...有前輩已經搞出了點東西
可以抄一抄...
把dotconfig copy 到 usr/src/linux-x 下的.config
在make menuconfig 存一下..多補些東西
hmm
make就ok了....
不過要先研讀好...核心設定...不然編出來的可能只是白編了
http://www.study-area.org/linux/system/linux_kernel.htm
補一下..安裝 Portage 光碟安裝
tar -xvjf /mnt/cdrom/snapshots/portage-20040710.tar.bz2 -C /mnt/gentoo/usr
# mkdir /mnt/gentoo/usr/portage/distfiles
# cp /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles/
最後總結一下...
這次重灌很久...遇到不少問題..
編核心時 現在已經有一份好的genkernel的 dotconfig可以用了
X11的xorng.conf 也有一份
這兩個重點要收藏好..
在來是輸入法的問題...scim..在.bashrc....打錯大寫小寫有差,,..所以別打錯
星期三, 9月 13, 2006
玩win32 MFc 很重要的東西
Message Routing
Message Loops
Message Maps
在MFC中很多東西都被藏起來了,所以為了瞭解,就必須找些win32的source code來參考一下,馬上就會得到解答.
其中WM_USER(即0x0400)及以後的數字,均為使用者定義訊息代碼。
Message Loops
Message Maps
在MFC中很多東西都被藏起來了,所以為了瞭解,就必須找些win32的source code來參考一下,馬上就會得到解答.
Msg msg
while(GetMessage(&msg,NULL,0,0))<-- from 32api
{
TranslateMessage(&msg); <-- from 32api
DispatchMessage(&msg); <-- from 32api 會呼叫WinProc去處理Message
}
其中WM_USER(即0x0400)及以後的數字,均為使用者定義訊息代碼。
星期三, 8月 23, 2006
char 陣列 指標 問題
char* s1 = "abcde";
char* s2 = "abcde";
char s3[] = "abcde";
char s4[] = "abcde";
char* skk = "abcde";
printf("%p\n", s1);
printf("%p\n", s2);
printf("%p\n", s3);
printf("%p\n", s4);
printf("%p\n", skk);
所得到的
s1
s2
skk位置都會一樣
char aa[64];
cout<<\sizeof(aa)<<\endl; //大小64
\strcpy(aa,"ddd");
cout<<\strlen(aa)<<\endl; 長度3
char*a="~~~~~~~~~~~~";
char a[]="~~~~~~~~~~~~";
printf("%s\n",a);
printf("%s\n",*a); //只會顯示~
Blog E
最好搞清楚一點這小東東
星期四, 7月 27, 2006
朋友函數 friends
friend 不會受到 private protected public 的影響!!
friend有可能是一個namespace的函式.也可能是class member function 也可能是朋友類別 .
當 class test{
};
架構定義下之後並沒有配制到記憶體內,只有當 test aa;時才會,這和JAVA小小的不同
JAVA要new過之後才算數.
friend有可能是一個namespace的函式.也可能是class member function 也可能是朋友類別 .
當 class test{
};
架構定義下之後並沒有配制到記憶體內,只有當 test aa;時才會,這和JAVA小小的不同
JAVA要new過之後才算數.
星期三, 7月 19, 2006
MFC 讀一張bmp and 秀出來
如果要用DIB就要傳一堆的參數給DIB的section
比如說加上一些有的沒的資料結構
struct {
BITMAPINFOHEADER info;
DWORD Bitfield[3];
}Header;
可以存一些BMP裡面的資訊,比如說,size,
void CChildView::OnPaint()
{
CPaintDC dc(this);
HDC memDC;
memDC=::GetDC(0);
HDC dd;
dd=::CreateCompatibleDC(memDC);
hbitmap=(HBITMAP)::LoadImage(::GetModuleHandle(0), _T("acropolis.bmp"),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);
holdbitmap=::SelectObject(dd,hbitmap);
// Attach(memDC);
// memDC.CreateCompatibleDC(dc);
BitBlt(dc,0,0,1024,600,dd,0,0,SRCCOPY); //BitBLT是秀圖用的funtion 第一個參數是準備要秀圖的dc,後面的dd是存好圖的的dd,第一個x,y是基準座標,然後是大小,後面的x,y是dd裡面的坐標.最後要加上SRCCOPY
比如說加上一些有的沒的資料結構
struct {
BITMAPINFOHEADER info;
DWORD Bitfield[3];
}Header;
可以存一些BMP裡面的資訊,比如說,size,
void CChildView::OnPaint()
{
CPaintDC dc(this);
HDC memDC;
memDC=::GetDC(0);
HDC dd;
dd=::CreateCompatibleDC(memDC);
hbitmap=(HBITMAP)::LoadImage(::GetModuleHandle(0), _T("acropolis.bmp"),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);
holdbitmap=::SelectObject(dd,hbitmap);
// Attach(memDC);
// memDC.CreateCompatibleDC(dc);
BitBlt(dc,0,0,1024,600,dd,0,0,SRCCOPY); //BitBLT是秀圖用的funtion 第一個參數是準備要秀圖的dc,後面的dd是存好圖的的dd,第一個x,y是基準座標,然後是大小,後面的x,y是dd裡面的坐標.最後要加上SRCCOPY
星期一, 7月 17, 2006
星期四, 7月 13, 2006
Makefile 小試身手
main.cpp
#include <iostream>
using namespace std
int main(void)
{
cout << "Can You Feel My World?" ;
return 0;
}
----------------------------------------------
all:main.cpp
<tab> g++ main.cpp -g -o run
注意一點 <tab>要按tab 按了g++那行變紅色才ok不然不會過的呦
等瞭解多一點在寫個解釋的文
星期日, 7月 09, 2006
SIP Solution 中四種穿透 NAT 的方式
一般而言,四種穿透 NAT 方式的 TURN / STUN / UPnP / VPN 皆為 SIP message 由 Proxy Server 處理,而 RTP 由外部伺服器處理,這種解決方案需 2 台 Server 。
Proxy Server
CPE 在真實 ip 下,相互知道彼此的 ip 位址及通訊埠 (port) ,能夠順利接通。但 在 NAT 下,相互不知道 IP 位址及通訊埠,須藉由外部伺服器才能夠順利接通。這就是 Proxy Server 的最主要功能。
Proxy Server
CPE 在真實 ip 下,相互知道彼此的 ip 位址及通訊埠 (port) ,能夠順利接通。但 在 NAT 下,相互不知道 IP 位址及通訊埠,須藉由外部伺服器才能夠順利接通。這就是 Proxy Server 的最主要功能。
星期四, 7月 06, 2006
Universal Plug and Play
肥軟MSDN
MSDN
Universal Plug and Play technology is an architecture for pervasive peer-to-peer network connectivity of PCs of all form factors, intelligent appliances, and wireless devices. UPnP technology is a distributed, open networking architecture that leverages TCP/IP and the Web to enable seamless proximity networking in addition to control and data transfer among networked devices in the home, office, and everywhere in between.
萬用隨插即用?我想改叫成全能的插和玩,或許有趣點.
MSDN
Universal Plug and Play technology is an architecture for pervasive peer-to-peer network connectivity of PCs of all form factors, intelligent appliances, and wireless devices. UPnP technology is a distributed, open networking architecture that leverages TCP/IP and the Web to enable seamless proximity networking in addition to control and data transfer among networked devices in the home, office, and everywhere in between.
萬用隨插即用?我想改叫成全能的插和玩,或許有趣點.
socket of UDP with C
剛剛寫的是TCP而UDP?
UDP有小小的不同在
socket(AF_INET,SOCK_DRGAM,0);
小小的變動
UDP的程式裡面少了list和accept ,TCP因為3方交握,所以龜毛的要確認來方.UDP就不用了,所以資料傳輸容易miss
//--------------------------------------------------------------------------
#include
#pragma comment(lib,"ws2_32")
#include
using namespace std;
int main()
{
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");
sockaddr_in local;
SOCKET s;
local.sin_family=AF_INET;
local.sin_addr.s_addr=inet_addr("127.0.0.1");
local.sin_port=htons(22222);
s=socket(AF_INET,SOCK_DGRAM,0);
bind(s,(SOCKADDR *)&local,sizeof(local));
char buf[1];
int a=sizeof(local);
for(;;)
{
recvfrom(s,buf,sizeof(buf),0,(SOCKADDR *)&local,&a);
sendto(s,"hello",13,0,(SOCKADDR *)&local,a);
}
cout < return 0;
}
UDP有小小的不同在
socket(AF_INET,SOCK_DRGAM,0);
小小的變動
UDP的程式裡面少了list和accept ,TCP因為3方交握,所以龜毛的要確認來方.UDP就不用了,所以資料傳輸容易miss
//--------------------------------------------------------------------------
#include
#pragma comment(lib,"ws2_32")
#include
using namespace std;
int main()
{
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");
sockaddr_in local;
SOCKET s;
local.sin_family=AF_INET;
local.sin_addr.s_addr=inet_addr("127.0.0.1");
local.sin_port=htons(22222);
s=socket(AF_INET,SOCK_DGRAM,0);
bind(s,(SOCKADDR *)&local,sizeof(local));
char buf[1];
int a=sizeof(local);
for(;;)
{
recvfrom(s,buf,sizeof(buf),0,(SOCKADDR *)&local,&a);
sendto(s,"hello",13,0,(SOCKADDR *)&local,a);
}
cout <
}
Socket with C
開個socket 就要 "include winsock2.h" 才有會個特異功能,這很正常的杯.
java 就要 import java.net.
而C的funtion裡面常有的縮寫
AF PF
PF -> protocaol family
其實沒啥差別
SOCK_STREAM
SOCK_DGRAM
SOCK_RAW <--特別的方式可以聽到IP層的資料.如icmp
有趣的是socket(int,int,int)都可以是int型態.也就是給數字也通的樣子.
socket_in 是寫一些網路資訊的資料結構
可以利用bind 和 connect 的funtion去把socket和這些資料連接
bind 結合參數 <-多用於server
connect是連線 <-多用於client
listen(socket , int) <--當完成 bind 後就可以利用來等連線 ,後面的int為連線數
accept(socket,sockaddr,int) 接受連線 <--準備傳資料啦.當後面兩個arg都為 null的時候表示不介意連線的點為何.
最後到了傳送的部份是send 和 recv .
當然還有UDP用的recvfrom 和 sendto.<-UDP要對方位置
架構概念 和java有點不一樣
socket -> bind -> listen -> accept -> recv && send
sockaddr_in sockaddr_in
下面是這次寫的小範例,不過在檔案部份小懶惰,沒寫好,所以有要copy得人要小心一點
//------------------------------------------------------------------------//
#include
#include
#include
#include "winsock2.h"
#pragma comment(lib,"ws2_32")
using namespace std;
void main() {
char readc[100000];
ifstream inFile("aaa.cmp", ios::binary);
ofstream out("bbb.txt",ios::binary);
long nFileSize= inFile.tellg();
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");
//-------------初始化 winsock很重要...沒有就不會動了
// Create a socket.
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}
// Bind the socket.
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
service.sin_port = htons( 27015 );
if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
printf( "bind() failed.\n" );
closesocket(m_socket);
return;
}
// Listen on the socket.
if ( listen( m_socket, 1 ) == SOCKET_ERROR )
printf( "Error listening on socket.\n");
// Accept connections.
SOCKET AcceptSocket;
printf( "Waiting for a client to connect...\n" );
int bytesSent=SOCKET_ERROR;
while (1) {
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR ) {
AcceptSocket = accept( m_socket, NULL, NULL );
}
printf( "Client Connected.\n");
m_socket = AcceptSocket;
break;
}
// Send and receive data.
while(inFile)
{
inFile.read(readc,100000);
bytesSent = send( m_socket, readc, 100000, 0 );
}
out.close();
inFile.close();
closesocket(m_socket);
}
java 就要 import java.net.
而C的funtion裡面常有的縮寫
AF PF
PF -> protocaol family
其實沒啥差別
SOCK_STREAM
SOCK_DGRAM
SOCK_RAW <--特別的方式可以聽到IP層的資料.如icmp
有趣的是socket(int,int,int)都可以是int型態.也就是給數字也通的樣子.
socket_in 是寫一些網路資訊的資料結構
可以利用bind 和 connect 的funtion去把socket和這些資料連接
bind 結合參數 <-多用於server
connect是連線 <-多用於client
listen(socket , int) <--當完成 bind 後就可以利用來等連線 ,後面的int為連線數
accept(socket,sockaddr,int) 接受連線 <--準備傳資料啦.當後面兩個arg都為 null的時候表示不介意連線的點為何.
最後到了傳送的部份是send 和 recv .
當然還有UDP用的recvfrom 和 sendto.<-UDP要對方位置
架構概念 和java有點不一樣
socket -> bind -> listen -> accept -> recv && send
sockaddr_in sockaddr_in
下面是這次寫的小範例,不過在檔案部份小懶惰,沒寫好,所以有要copy得人要小心一點
//------------------------------------------------------------------------//
#include
#include
#include
#include "winsock2.h"
#pragma comment(lib,"ws2_32")
using namespace std;
void main() {
char readc[100000];
ifstream inFile("aaa.cmp", ios::binary);
ofstream out("bbb.txt",ios::binary);
long nFileSize= inFile.tellg();
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");
//-------------初始化 winsock很重要...沒有就不會動了
// Create a socket.
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}
// Bind the socket.
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
service.sin_port = htons( 27015 );
if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
printf( "bind() failed.\n" );
closesocket(m_socket);
return;
}
// Listen on the socket.
if ( listen( m_socket, 1 ) == SOCKET_ERROR )
printf( "Error listening on socket.\n");
// Accept connections.
SOCKET AcceptSocket;
printf( "Waiting for a client to connect...\n" );
int bytesSent=SOCKET_ERROR;
while (1) {
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR ) {
AcceptSocket = accept( m_socket, NULL, NULL );
}
printf( "Client Connected.\n");
m_socket = AcceptSocket;
break;
}
// Send and receive data.
while(inFile)
{
inFile.read(readc,100000);
bytesSent = send( m_socket, readc, 100000, 0 );
}
out.close();
inFile.close();
closesocket(m_socket);
}
訂閱:
文章 (Atom)