質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

Q&A

1回答

3488閲覧

c#で画像を送りそれを表示するプログラムが動きません

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

0グッド

0クリップ

投稿2016/12/27 06:21

回答がもらえなかったので再度質問させていただきます。
書いてみたのですが動きません
通信のプログラムを書くのは初めてなので手順があいまいなのですが何が原因で動かないのか教えていただけませんでしょうか?

サーバー側

c#

1using System; 2using System.IO; 3using System.Net; 4using System.Collections.Generic; 5using System.ComponentModel; 6using System.Data; 7using System.Drawing; 8using System.Linq; 9using System.Text; 10using System.Threading.Tasks; 11using System.Windows.Forms; 12using System.Net.Sockets; 13 14namespace ServerSys 15{ 16 public partial class Form1 : Form 17 { 18 public Form1() 19 { 20 InitializeComponent(); 21 var server = new Server(6666); 22 server.ListenOrder(); 23 } 24 } 25 26 class Server 27 { 28 private IPEndPoint remote; 29 private UdpClient Client { get; set; } 30 private Form FormPer { get; set; } 31 32 public Server(int port) 33 { 34 this.FormPer = new Form(); 35 this.remote = new IPEndPoint(IPAddress.Any, port); 36 this.Client = new UdpClient(new IPEndPoint(IPAddress.Any, port)); 37 } 38 39 public void ListenOrder() 40 { 41 while(true) 42 { 43 var buffer = Client.Receive(ref remote); 44 System.Threading.Thread.Sleep(2000); 45 46 using (var ms = new MemoryStream(buffer)) 47 { 48 Bitmap bm = new Bitmap(ms); 49 this.FormPer.Size = new Size(bm.Width + 10, bm.Height + 20); 50 this.FormPer.BackgroundImage = bm; 51 this.FormPer.Show(); 52 53 ms.Close(); 54 } 55 } 56 } 57 } 58}

クライアント側

c#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.IO; 7using System.Linq; 8using System.Net; 9using System.Net.Sockets; 10using System.Text; 11using System.Threading.Tasks; 12using System.Windows.Forms; 13 14namespace ClientSys 15{ 16 public partial class Form1 : Form 17 { 18 private Timer time; 19 private Client client = new Client(new IPEndPoint(IPAddress.Parse("192.168.0.4"), 6666)); 20 21 public Form1() 22 { 23 InitializeComponent(); 24 25 this.time = new Timer() 26 { 27 Interval = 1000, 28 }; 29 30 this.time.Tick += (sender, e) => 31 { 32 this.client.SendImage(6666); 33 }; 34 } 35 36 private void button1_Click(object sender, EventArgs e) 37 { 38 this.time.Start(); 39 } 40 } 41 42 class Client 43 { 44 private IPEndPoint Remote { get; set; } 45 46 public Client(IPEndPoint iep) 47 { 48 this.Remote = iep; 49 } 50 51 public void SendImage(int port) 52 { 53 using (var client = new UdpClient(port)) 54 { 55 var byteimg = ScreenCapture.CaptureBitmap(); 56 57 client.Connect(this.Remote); 58 client.Send(byteimg, byteimg.Length); 59 client.Close(); 60 } 61 } 62 } 63 64 static class ScreenCapture 65 { 66 public static byte[] CaptureBitmap() 67 { 68 byte[] byteimage; 69 Bitmap bm = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 70 71 using (var mms = new MemoryStream()) 72 { 73 using (var graphics = Graphics.FromImage(bm)) 74 { 75 graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), bm.Size); 76 bm.Save(mms, System.Drawing.Imaging.ImageFormat.Bmp); 77 byteimage = mms.GetBuffer(); 78 } 79 80 mms.Close(); 81 } 82 83 return byteimage; 84 } 85 } 86}

クライアント側では自分の画面をキャプチャし、bitmap型をbyte[]型にして返すプログラムを作り、ボタンを押すとタイマーが起動してサーバーに対して1秒ごとにそれを送るプログラム(を書いている予定)です。

サーバー側では送られてきたbyte[]型をbitmapオブジェクトにし、2秒ごとにフォームに貼り付けるプログラムです。

サーバーのプログラムを動かす際、コンストラクタ内のthis.Clientの行で

型 'System.Net.Sockets.SocketException' のハンドルされていない例外が System.dll で発生しました 追加情報:通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます

というエラーがでるのですがどこがおかしいのか分かりません。
教えていただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

うーん…エラーを検索しましたか?このエラーは答えがすぐ見つかるはずなんですけど…

ポート6666からデータを出してポート6666でデータを受け取ろうと思ってるから動きません
自分からデータを送るのに送り元と送り先のポートが重複していてはだめなわけです

クライアントのポートを6667等別のものに変えてみてください

this.client.SendImage(6667);

投稿2016/12/27 07:21

haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/27 09:58

すみません、エラー自体は検索したのですがネットワークの勉強不足でエラーメッセージの意味がわかりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問