C#でHTTPRequestのプログラムを作成する。送信元ポート番号を指定したいため。
ここで必要な内容は、Socket.Bind()の部分。
-------------------
Socket sock = null;
string resMsg = "";
Encoding enc = Encoding.UTF8;
string server = txt_ipaddress.Text; //接続先サーバ
int source_port = Convert.ToInt32(txt_src_port.Text); //接続先のポート番号
int dest_port = Convert.ToInt32(txt_dest_port.Text); //送信元のポート番号
byte[] reqMsg = Encoding.UTF8.GetBytes(txt_ReqMsg.Text);//送信するリクエスト内容
Console.WriteLine(txt_ReqMsg.Text);
IPAddress hostadd = Dns.GetHostEntry(server).AddressList[0];
IPEndPoint ephost = new IPEndPoint(hostadd, dest_port);
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, source_port);
try{
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(localEP);
sock.Connect(ephost);
sock.Send(reqMsg, reqMsg.Length, SocketFlags.None);
byte[] resBytes = new byte[1024];
MemoryStream mem = new MemoryStream();
while (true){
int resSize = sock.Receive(resBytes, resBytes.Length, SocketFlags.None);
if (resSize == 0) break;
mem.Write(resBytes, 0, resSize);
}
resMsg = enc.GetString(mem.GetBuffer(), 0, (int)mem.Length);
mem.Close();
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
catch (Exception exc){
MessageBox.Show("Error:" + exc.Message);
txt_ResMsg.Text = exc.Message;
if( sock != null ) sock.Close();
}
txt_ResMsg.Text = resMsg;
メモメモ