อะไรคือความแตกต่างระหว่างการเขียนโปรแกรมซ็อกเก็ตและการเขียนโปรแกรม Http? ใครช่วยได้บ้าง
อะไรคือความแตกต่างระหว่างการเขียนโปรแกรมซ็อกเก็ตและการเขียนโปรแกรม Http? ใครช่วยได้บ้าง
คำตอบ:
HTTP เป็นโปรโตคอลของแอปพลิเคชัน โดยพื้นฐานแล้วหมายความว่าไม่สามารถใช้ HTTP เพื่อขนส่งข้อมูลไปยัง / จากจุดสิ้นสุดระยะไกลได้ แต่จะอาศัยโปรโตคอลพื้นฐานซึ่งในกรณีของ HTTP คือ TCP
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเลเยอร์ OSI ได้หากคุณสนใจ
ในทางกลับกันซ็อกเก็ตเป็น API ที่ระบบปฏิบัติการส่วนใหญ่มีให้เพื่อให้สามารถพูดคุยกับเครือข่ายได้ ซ็อกเก็ต API รองรับโปรโตคอลที่แตกต่างกันตั้งแต่เลเยอร์การขนส่งขึ้นไป
นั่นหมายความว่าหากคุณต้องการใช้ TCP คุณจะใช้ซ็อกเก็ต แต่คุณยังสามารถใช้ซ็อกเก็ตเพื่อสื่อสารโดยใช้ HTTP ได้ แต่คุณต้องถอดรหัส / เข้ารหัสข้อความตามข้อกำหนดของ HTTP ( RFC2616 ) เนื่องจากนั่นอาจเป็นงานที่ยิ่งใหญ่สำหรับนักพัฒนาส่วนใหญ่เราจึงมีลูกค้าที่พร้อมใช้งานในเฟรมเวิร์กสำหรับนักพัฒนาของเรา (เช่น. NET) เช่นWebClient
หรือHttpWebRequest
คลาส
ด้วย HTTP คุณใช้โปรโตคอล HTTP ระดับสูง (ซึ่งทำงานบนซ็อกเก็ต) ไม่มีเซสชันซึ่งหมายความว่าคุณส่งคำขอข้อความเช่นGET google.com
และรับข้อความหรือข้อมูลไบนารีในทางกลับกันหลังจากการเชื่อมต่อนั้นถูกปิด (ในการเชื่อมต่อแบบถาวรของ HTTP 1.1 จะพร้อมใช้งาน)
ตัวอย่าง MSDN:
public static void Main (string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
Console.WriteLine ("Content length is {0}", response.ContentLength);
Console.WriteLine ("Content type is {0}", response.ContentType);
// Get the stream associated with the response.
Stream receiveStream = response.GetResponseStream ();
// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
Console.WriteLine ("Response stream received.");
Console.WriteLine (readStream.ReadToEnd ());
response.Close ();
readStream.Close ();
}
ด้วยซ็อกเก็ตคุณจะอยู่ในระดับที่ต่ำกว่าและควบคุมการเชื่อมต่อและส่ง / รับไบต์ดิบ
ตัวอย่าง:
var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345);
var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(remoteEndpoint);
socket.Send(new byte[] {1, 2, 3, 4});
Connection
ตั้งค่าส่วนหัว;)
การเชื่อมต่อ HTTP
- การเชื่อมต่อ HTTP เป็นโปรโตคอลที่ทำงานบนซ็อกเก็ต
- การเชื่อมต่อ HTTP เป็นนามธรรมระดับสูงของการเชื่อมต่อเครือข่าย
- ด้วยการเชื่อมต่อ HTTP การใช้งานจะดูแลรายละเอียดระดับสูงเหล่านี้ทั้งหมดและเพียงแค่ส่งคำขอ HTTP (ข้อมูลส่วนหัวบางส่วน) และรับการตอบสนอง HTTP จากเซิร์ฟเวอร์
การเชื่อมต่อซ็อกเก็ต
- Socket ใช้ในการขนส่งข้อมูลระหว่างระบบ เพียงแค่เชื่อมต่อสองระบบเข้าด้วยกันที่อยู่ IP คือที่อยู่ของเครื่องผ่านเครือข่ายที่ใช้ IP
- ด้วยการเชื่อมต่อซ็อกเก็ตคุณสามารถออกแบบโปรโตคอลของคุณเองสำหรับการเชื่อมต่อเครือข่ายระหว่างสองระบบ
- ด้วยการเชื่อมต่อ Socket คุณต้องดูแลรายละเอียดระดับล่างทั้งหมดของการเชื่อมต่อ TCP / IP
การเขียนโปรแกรม HTTP หรือคำร้องขอ HTTP ใช้สำหรับการเชื่อมต่อแบบหลวม ๆ และ การสื่อสารด้วยเทคโนโลยีภาษาที่เป็นกลางของแพลตฟอร์มซึ่งเมื่อใช้การเขียนโปรแกรมซ็อกเก็ตที่ระบบมีโปรโตคอลข้อกำหนดภาษา
เพื่อให้จุดสิ้นสุดสองจุดสามารถพูดคุยกันได้ทั้งคู่ควรปฏิบัติตามกฎชุดหนึ่ง ในคอมพิวเตอร์ชุดของกฎเหล่านี้เรียกว่าโปรโตคอล
ตัวอย่างเช่นสำหรับปลายทางเช่นเบราว์เซอร์และอีกอย่างเช่นเว็บเซิร์ฟเวอร์ทั้งคู่ควรปฏิบัติตามชุดของกฎหรือโปรโตคอลที่เรียกว่า http เพื่อให้สามารถสื่อสารและแลกเปลี่ยนข้อมูลได้ ดังนั้นในเว็บทั่วโลกและการสื่อสารประเภทนี้มีเพียงผู้ที่พูดคุยตามโปรโตคอล http นี้เท่านั้นที่สามารถพูดคุยกันได้สำเร็จ
ซ็อกเก็ตเป็นเพียงจุดสิ้นสุด อาจเป็นไปตามโปรโตคอล http เพื่อสื่อสารใน www ในฐานะไคลเอนต์ที่ร้องขอเพจหรืออาจทำหน้าที่เป็นเซิร์ฟเวอร์ที่รับฟังการเชื่อมต่อ หรืออาจเป็นไปตามกฎหรือโปรโตคอลอื่นเช่น ssh, ftp และสื่อสารด้วยวิธีอื่น
ตอนนี้ในการเขียนโปรแกรมซ็อกเก็ตคุณสามารถสร้างซ็อกเก็ตเชื่อมโยงกับที่อยู่ IP และหมายเลขพอร์ตเพื่อทำหน้าที่เป็นหมายเลขพอร์ตและบอกให้ทำตาม http, ssh, ftp หรืออะไรก็ได้ที่คุณต้องการตามการสื่อสารที่คุณต้องการใช้ ซ็อกเก็ตสำหรับ.