- ベストアンサー
Linuxで簡単なIP電話のプログラミングを書く方法
chie65535の回答
追記。 先ほどのページに ----------- 256 バイト以下の fragment サイズはお勧めできないそうです ( OSS プログラマーズガイドより )。 ----------- って書いてあるので、セグメントを余り小さくし過ぎないように。
関連するQ&A
- ソケットプログラミングによるファイル送信について
VC++.NETを利用して、Winsockにてファイル送信プログラムを作成しています。ソケットはUDPを使用しています。 [行いたいこと] A→B端末へ、1024Byteずつバイナリデータ(画像)を送信。 [現在行っていること(A端末側のプログラムの概略)] 1.ファイルオープン 2.fread関数にてバイナリデータの入力(whileにてループ) 3.A→Bへパケットを1024Byteずつ送信。 #define DATA_SIZE 1024 main{ int n; char send_Buf[DATA_SIZE + 1]; if((fp = fopen(fname,"rb+")) == NULL){ printf("ファイルエラー\n"); exit(1); } //nが0でなくなったら、ループを抜ける。 while((n = fread(send_Buf,1,DATA_SIZE,fp)) != 0) { sendto(s, send_Buf, n, 0, (LPSOCKADDR)&addrin, sizeof(addrin)); } } A側でビルドはできますがエラーが発生して実行できません。 よろしければ教えていただけないでしょうか。C言語の基礎もきちんと出来ていないからなのかもしれません・・・>< よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Linuxでパケットのデータ部分を合成するプログラムを教えてください。
LinuxでC言語を使用しているのですが、パケットのデータ部分を合成するプログラムのを教えてください。 具体的な例として、 端末A,B,Cがあり、AはBを中継して、CにUDPパケットを2個送信します。 中継端末のBは2個のUDPパケットをバッファリングした後、データ部分のみを1個のパケットにまとめてCに送信します。(ヘッダ部分はAが送信したときと同じにしたい) Cは2個分のデータが入ったUDPパケットを1個受信する。 この例の端末Bでのプログラムを書くとするとどのようにすればいいのでしょうか?? よろしくお願いしますm(_ _)m
- ベストアンサー
- C・C++・C#
- WinSock プロトコルスタックバッファについて
開発環境 XP、VC2005、C/C++、WinSock WinSockでネットワークプログラミングをしています。 例えば、下記のようなコードでデータを送信するとします。 int send_byte = send(socket, buf, byte, 0) このとき、変数byteには1024が入っているとします。 上記のコードをループさせてデータを送信すると、 しばらくsend_byteには byteと同じ値1024が入っています。 でも、プロトコルスタックバッファが満杯になり、 send()が処理しきれなくなった場合に、 byteは1024なのに、send_byteが例えば500などになります。 つまり、中途半端に送信してしまいますよね。 これはWinSockの仕様だと思いますが、 できれば中途半端には送信したくないのです。 このように中途半端に送信しない方法はあるでしょうか? send()するまえにプロトコルスタックバッファの空きが調べられれば なんとかできそうな気もするのですが・・・。 よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- 中身が同じような関数を一つの関数にしたい
void C_Commu::Recv( vector<void *> Data ) { ----BYTE *Buf; ----int TotalSize, RecvSize; --------TotalSize = Data.size()*sizeof(Data[0]); --------Buf = new BYTE[TotalSize]; --------while( RecvSize < TotalSize ) --------{ ------------RecvSize += recv( Sock, (char *)Buf, TotalSize-RecvSize, 0 ); --------} --------memcpy( &Data[0], Buf, TotalSize ); } このような関数を作ってみたのですが、 C_Commu::Recv( Data->CharaNum ); //vector<char> CharaNum C_Commu::Recv( Data->Model ); //vector<S_Model> Model(S_Modelは構造体) としてみると 'C_Commu::Recv' : 1 番目の引数を 'std::vector<_Ty>' から 'std::vector<_Ty>' に変換できません。 とエラーになります。 使いたい動的配列が違うだけで残りは同じ関数なので一つに纏めてみたのですがどうしてエラーになるのか分かりません。 どのようにしたらいいのでしょうか?
- ベストアンサー
- C・C++・C#
- 構造体メンバがポインタであるときの代入
typedef struct WRITE_BUF_TYPE{ byte adr_h; // ワードアドレス上位 byte adr_l; // ワードアドレス下位 byte *buf_adr; // 送信/受信先 アドレス byte cnt; // 文字数 }; struct W_BUF_TYPE b[10]; 構造体、データ定義を上のようにしています。 b[10]の空きを探して書き込むサブルーチンを作ったのですが、*buf_adrの設定方法がわかりません。 ご存知の方、教えてください。 サブルーチン sub_func(int8 *adr){ byte i; for(i=0;i<10;i++){ if(b[i].adr_h==0){ // b[10]の空き検索 b[i].buf_adr=*adr; // アドレスを設定する。ここでエラーとなります。 } } サブルーチンでバッファのアドレスを受けて、b[10]の空きエリアに設定するプログラムです。
- ベストアンサー
- C・C++・C#
- 大きな画像ByteデータをUDP転送したい
VB.net2005でサーバーアプリとクライアントアプリを作って 全クライアントに一定間隔で画像を送信しようと思ってます。 クライアント側は全部取れなくてもいいので、UDPを使ってみたのですが、 送る画像をbmp.GetPixel()で取得してByte型の配列に詰めて 縦160*横120*3(RGB)分で転送する分にはOKだったのですが、 縦320*横240*3(RGB)分はNGでした。 (65535バイト以上送信するとエラーになる…UDPのデフォルトの バッファ最大値?) それでMemoryStreamとDeflateStreamと使って圧縮してみたものの 230401Byte → 222169Byte程度にしかなりませんでした。 jpgのByteデータにして送れば小さくなるのかと思ったのですが 良いやり方がわかりませんでした。 他の方法でもいいのですが、Byteデータを小さくする手段って ありますでしょうか?
- ベストアンサー
- Visual Basic
- UDPサーバのスレッド化
JavaでUDPのサーバを作っているのですが、スレッド化ができません。] 以下の二つがキーワードだと思うのですが、どうかいていけばいいのかわかりません。お分かりになる方ご教授お願いいたします。 public class c_udp_server extends public void run() //サーバソース import java.io.*; import java.net.*; public class c_udp_server { public static void main(String args[]){ int port = 8000; BufferedInputStream biStream; InetAddress clientAddress; int clientPort; byte buf[]= new byte[160*120*3]; DatagramPacket sendPacket = new DatagramPacket(buf,buf.length); byte req[] = new byte[32]; DatagramPacket receivePacket = new DatagramPacket(req,req.length); try { DatagramSocket socket = new DatagramSocket(port); System.out.println("Running..."); while(true){ socket.receive(receivePacket); clientAddress = receivePacket.getAddress(); clientPort = receivePacket.getPort(); socket.send(receivePacket); sendPacket.setAddress(clientAddress); sendPacket.setPort(clientPort); sendPacket.setLength(160*120*3); biStream = new BufferedInputStream(new FileInputStream(s.raw)); for(;;){ biStream.read(buf,0,160*120*3); socket.send(sendPacket); if(buf[0] < 0)break; } biStream.close(); } } catch(Exception e){ System.out.println("Exception :" + e); } } } 環境 Windows XP Pro java version "1.5.0_10"
- 締切済み
- Java
- iアプリ:スクラッチパッド
お世話になっております、dwtです。 テキストやWEB片手に独学でiアプリ開発をやっているのですが どうしても解決できない点があり質問させて頂きました。 現在、Eclipseを用いて開発していて エミュレータ上では意図する通り動くのですが 実機(SO506iC)では上手く動作しません。 動作させたい流れは以下となっております 初回起動かを確認 ↓ 特定のフラグが0なら初回読み込みと判定 WEBから画像をDLしスクラッチパッド2に保存 ↓ 読み込み済みフラグを書き込み ↓ その他の処理 という流れを行っているのですが 実機ではスクラッチパッドが書き込まれていないのか 常に初回起動扱いの動作をします。 読み込み部 //----------------------------------------- os_in = Connector.openInputStream("scratchpad:///0;pos=0"); byte_data = new byte[1]; int_size = (int)(os_in.read()&0xEF); byte_data = new byte[int_size]; os_in.read(byte_data); str_retdata = new String(byte_data , 0 , int_size ); WEBから画像を取得しスクラッチパッド2に画像を保存する処理 //------------------------------------ (コネクト部字数制限により略) OutputStream out = Connector.openOutputStream("scratchpad:///2;pos=0"); byte[] byte_buf = new byte[1000]; while(( int_size = in.read(byte_buf)) != -1) { out.write(byte_buf,0,int_size ); } また次の点も解決できずにいます。 ・gif画像を90kb程度のサイズにした場合、最初の画像表示部でエラー停止してしまう →画像サイズに制限? ・スクラッチパッド0のデータを読み込む際 最後まで読み込めず途中で途切れてしまう。 スクラッチパッド0のデータを途切れる事なくSTRING型に格納する良い方法は…? 何かご存知の方がいらっしゃいましたらお願いします。
- ベストアンサー
- Java
- sonar 7の録音の遅れについて
自宅録音をしようと思っているのですが、打ち込んだドラムにギターを合わせて録音するとギター音が遅れます。再生バッファ数、I/Oバッファサイズなどよくわかりませんがいろいろ調べてやっても遅れてしまうのです。良い対策をよろしくお願いいたします。 sonar7 オーディオインターフェイスはsound blaster digital music sxです。
- 締切済み
- その他(趣味・娯楽・エンターテイメント)
- URLクラスでのリード時のバッファサイズについて
URLクラスでインターネットアクセスするときに、以下のようにプログラムする場合、望ましいBUFSIZEはあるのでしょうか。 inputstream.read(byte_buf,offset,BUFSIZE) A プログラマーは任意のバッファサイズを指定して、なんら問題はない。 仮に1であっても、実際はJavaのほうでネットアクセスするに最適なサイズでアクセスし、そこから1バイトずつくれるので問題はない。同様にして、メモリの許す限りに大きいバッファサイズも問題はない。 B Javaはコーディングどおりに、サーバーに1バイトを要求するので、ファイルダウンロードする方法としてとんでもないことだ。同様にして、一度に何十メガバイトもの指定もとんでもないことだ。 AとBで、どちらが正しいでしょうか。Bならば、のぞましいバッファサイズと、その根拠を教えてください。通常、ダウンロードするときのネットマナーみたいなものはあるのでしょうか。
- ベストアンサー
- Java
お礼
あ、私が参考にしたページに答えが書いてあったとは(汗) 灯台もと暗すぎる(^-^;) フラグメントを小さく指定してやってみます! ありがとうございました!