คำถามติดแท็ก sockets

จุดสิ้นสุดของโฟลว์การสื่อสารระหว่างกระบวนการแบบสองทิศทาง ซึ่งมักหมายถึงโฟลว์ของกระบวนการผ่านการเชื่อมต่อเครือข่าย แต่ไม่ได้ จำกัด อยู่เพียงแค่นั้น อย่าสับสนกับ WebSocket (โปรโตคอล) หรือนามธรรมอื่น ๆ (เช่น socket.io)

5
การปิด WebSocket อย่างถูกต้อง (HTML5, Javascript)
ฉันกำลังเล่นกับ HTML5 WebSockets ฉันสงสัยว่าฉันจะปิดการเชื่อมต่ออย่างสง่างามได้อย่างไร เช่นจะเกิดอะไรขึ้นหากผู้ใช้รีเฟรชหน้าหรือเพียงแค่ปิดเบราว์เซอร์ มีพฤติกรรมแปลก ๆ เมื่อผู้ใช้รีเฟรชเพจโดยไม่โทรwebsocket.close()- เมื่อพวกเขากลับมาหลังจากรีเฟรชมันจะเข้าสู่websocket.oncloseเหตุการณ์

3
การโทรแบบขนานเพื่อส่ง / รับสัญญาณบนซ็อกเก็ตเดียวกันถูกต้องหรือไม่
เราสามารถเรียกส่งจากเธรดหนึ่งและรับจากอีกเธรดหนึ่งบนซ็อกเก็ตเดียวกันได้หรือไม่? เราสามารถเรียกการส่งหลายรายการแบบคู่ขนานจากเธรดที่แตกต่างกันบนซ็อกเก็ตเดียวกันได้หรือไม่ ฉันรู้ว่าการออกแบบที่ดีควรหลีกเลี่ยงสิ่งนี้ แต่ฉันไม่ชัดเจนว่า API ของระบบเหล่านี้จะทำงานอย่างไร ฉันไม่พบเอกสารที่ดีสำหรับเรื่องเดียวกันนี้ ตัวชี้ทิศทางใด ๆ จะเป็นประโยชน์
127 c  networking  sockets 

4
ฟังก์ชั่น socket API accept () ทำงานอย่างไร?
ซ็อกเก็ต API เป็นมาตรฐานโดยพฤตินัยสำหรับการสื่อสาร TCP / IP และ UDP / IP (นั่นคือรหัสเครือข่ายที่เรารู้จัก) อย่างไรก็ตามหนึ่งในฟังก์ชั่นหลักของมันaccept()นั้นมีมนต์ขลังเล็กน้อย หากต้องการยืมคำจำกัดความกึ่งทางการ: ยอมรับ () ถูกใช้ในฝั่งเซิร์ฟเวอร์ ยอมรับความพยายามที่เข้ามาเพื่อสร้างการเชื่อมต่อ TCP ใหม่จากไคลเอนต์ระยะไกลและสร้างซ็อกเก็ตใหม่ที่เชื่อมโยงกับคู่ที่อยู่ซ็อกเก็ตของการเชื่อมต่อนี้ กล่าวอีกนัยหนึ่งคือacceptส่งคืนซ็อกเก็ตใหม่ซึ่งเซิร์ฟเวอร์สามารถสื่อสารกับไคลเอ็นต์ที่เชื่อมต่อใหม่ได้ ซ็อกเก็ตเก่า (ซึ่งacceptถูกเรียกว่า) ยังคงเปิดอยู่บนพอร์ตเดียวกันเพื่อรับฟังการเชื่อมต่อใหม่ วิธีการacceptทำงานหรือไม่ มีการใช้งานอย่างไร? มีความสับสนมากมายในหัวข้อนี้ หลายคนอ้างว่ายอมรับเปิดพอร์ตใหม่และคุณสื่อสารกับลูกค้าผ่านพอร์ตนั้น แต่เห็นได้ชัดว่าสิ่งนี้ไม่เป็นความจริงเนื่องจากไม่มีการเปิดพอร์ตใหม่ คุณสามารถสื่อสารผ่านพอร์ตเดียวกันกับไคลเอนต์ต่าง ๆ ได้จริง แต่อย่างไร? เมื่อหลายเธรดเรียกrecvใช้พอร์ตเดียวกันข้อมูลจะรู้ได้อย่างไรว่าจะไปที่ใด ฉันเดาว่ามันเป็นสิ่งที่อยู่ตามบรรทัดของที่อยู่ของลูกค้าที่เชื่อมโยงกับตัวอธิบายซ็อกเก็ตและเมื่อใดก็ตามที่ข้อมูลเข้ามาข้อมูลrecvจะถูกส่งไปยังซ็อกเก็ตที่ถูกต้อง แต่ฉันไม่แน่ใจ เป็นการดีที่จะได้รับคำอธิบายอย่างละเอียดเกี่ยวกับการทำงานภายในของกลไกนี้
126 networking  sockets  tcp 

5
TCP: สองซ็อกเก็ตที่แตกต่างกันสามารถแบ่งปันพอร์ตได้หรือไม่?
นี่อาจเป็นคำถามพื้นฐาน แต่มันทำให้ฉันสับสน สองซ็อกเก็ตที่เชื่อมต่อที่แตกต่างกันสามารถใช้พอร์ตร่วมกันได้หรือไม่? ฉันกำลังเขียนแอปพลิเคชันเซิร์ฟเวอร์ที่น่าจะรองรับการเชื่อมต่อพร้อมกันได้มากกว่า 100k และเรารู้ว่าจำนวนพอร์ตที่มีอยู่ในระบบอยู่ที่ประมาณ 60k (16 บิต) ซ็อกเก็ตที่เชื่อมต่อถูกกำหนดให้กับพอร์ตใหม่ (เฉพาะ) ดังนั้นจึงหมายความว่าจำนวนการเชื่อมต่อพร้อมกันจะถูก จำกัด โดยจำนวนพอร์ตเว้นแต่ซ็อกเก็ตหลายตัวสามารถใช้พอร์ตเดียวกันร่วมกันได้ ดังนั้นคำถาม ขอบคุณสำหรับความช่วยเหลือล่วงหน้า!

10
ซ็อกเก็ต: ค้นหาความพร้อมใช้งานของพอร์ตโดยใช้ Java
ฉันจะตรวจสอบความพร้อมใช้งานของพอร์ตในเครื่องที่กำหนดโดยใช้ Java โดยทางโปรแกรมได้อย่างไร เช่นระบุหมายเลขพอร์ตตรวจสอบว่ามีการใช้งานอยู่แล้วหรือไม่?
123 java  sockets  port 

7
socket.shutdown กับ socket.close
ฉันเพิ่งเห็นรหัสเล็กน้อยที่มีลักษณะเช่นนี้ (แน่นอนว่าถุงเท้าเป็นวัตถุซ็อกเก็ต): sock.shutdown(socket.SHUT_RDWR) sock.close() จุดประสงค์ของการเรียกการปิดระบบบนซ็อกเก็ตแล้วปิดมันคืออะไร? หากสร้างความแตกต่างซ็อกเก็ตนี้จะถูกใช้สำหรับ IO ที่ไม่ปิดกั้น

6
ซ็อกเก็ตเชื่อมต่อ () กับผูก ()
ทั้งสองconnect()และbind()ระบบเรียก 'เชื่อมโยง' ตัวอธิบายไฟล์ซ็อกเก็ตไปยังที่อยู่ (โดยทั่วไปคือการรวมกันของ ip / พอร์ต) ต้นแบบของพวกเขามีดังนี้: - int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); และ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 2 สายต่างกันอย่างไร? ควรใช้connect()เมื่อใดและเมื่อbind()ใด โดยเฉพาะในโค้ดไคลเอ็นต์เซิร์ฟเวอร์ตัวอย่างบางตัวพบว่าไคลเอ็นต์กำลังใช้งานconnect()และเซิร์ฟเวอร์กำลังใช้การbind()โทร เหตุผลไม่ชัดเจนสำหรับฉัน


4
การเชื่อมต่อ TCP loopback เทียบกับประสิทธิภาพของ Unix Domain Socket
ทำงานบนแอปพลิเคชันที่ใช้ Android และ iOS ซึ่งต้องการการสื่อสารกับเซิร์ฟเวอร์ที่ทำงานในอุปกรณ์เดียวกัน ปัจจุบันใช้การเชื่อมต่อ TCP loopback สำหรับการสื่อสารกับแอพและเซิร์ฟเวอร์ (แอพที่เขียนในเลเยอร์ผู้ใช้เซิร์ฟเวอร์ที่เขียนด้วย C ++ โดยใช้ Android NDK) ฉันสงสัยว่าการแทนที่การสื่อสารระหว่างกันด้วยซ็อกเก็ต Unix Domain จะช่วยเพิ่มประสิทธิภาพได้หรือไม่? หรือโดยทั่วไปมีหลักฐาน / ทฤษฎีใดที่พิสูจน์ได้ว่าซ็อกเก็ต Unix Domain จะให้ประสิทธิภาพที่ดีกว่าการเชื่อมต่อ TCP loopback หรือไม่?

4
เปลี่ยนซ็อกเก็ตธรรมดาให้เป็นซ็อกเก็ต SSL
ฉันเขียนโปรแกรม C อย่างง่ายซึ่งใช้ซ็อกเก็ต ('ไคลเอนต์' และ 'เซิร์ฟเวอร์') (การใช้งาน UNIX / Linux) ฝั่งเซิร์ฟเวอร์สร้างซ็อกเก็ต: sockfd = socket(AF_INET, SOCK_STREAM, 0); จากนั้นผูกเข้ากับ sockaddr: bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); และฟัง (และยอมรับและอ่าน): listen(sockfd,5); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); read(newsockfd,buffer,255); ไคลเอนต์สร้างซ็อกเก็ตจากนั้นเขียนลงในซ็อกเก็ต ตอนนี้ฉันต้องการแปลงการเชื่อมต่อแบบธรรมดานี้เป็นการเชื่อมต่อ SSL ด้วยวิธีที่เรียบง่ายงดงามที่สุดเรียบร้อยที่สุดและรวดเร็วที่สุด ฉันพยายามเพิ่มOpenSSLในโปรเจ็กต์ของฉันแล้ว แต่ฉันไม่พบวิธีง่ายๆในการนำสิ่งที่ฉันต้องการไปใช้
115 c  linux  sockets  unix  ssl 

10
ประสิทธิภาพของ IPC: ชื่อว่า Pipe vs Socket
ดูเหมือนทุกคนจะบอกว่าท่อที่ตั้งชื่อนั้นเร็วกว่าซ็อกเก็ต IPC พวกเขาเร็วแค่ไหน? ฉันต้องการใช้ซ็อกเก็ตเพราะสามารถสื่อสารสองทางได้และมีความยืดหยุ่นมาก แต่จะเลือกความเร็วมากกว่าความยืดหยุ่นหากเป็นจำนวนมาก

13
อะไรคือสาเหตุของข้อผิดพลาดที่ปฏิเสธการเชื่อมต่อ?
ฉันกำลังพยายามเขียนโปรแกรมเซิร์ฟเวอร์ใน C โดยใช้ไคลเอนต์อื่นฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเชื่อมต่อผ่านพอร์ต 2080 เช่น connection refused อะไรคือสาเหตุของข้อผิดพลาดนี้?

6
การเชื่อมต่อกับ TCP Socket จากเบราว์เซอร์โดยใช้ javascript
ฉันมีแอปพลิเคชั่น vb.net ที่เปิดซ็อกเก็ตและฟังมัน ฉันต้องการสื่อสารผ่านซ็อกเก็ตนี้ไปยังแอปพลิเคชันนั้นโดยใช้จาวาสคริปต์ที่ทำงานบนเบราว์เซอร์ นั่นคือฉันต้องส่งข้อมูลบางอย่างในซ็อกเก็ตนี้เพื่อให้แอพที่กำลังฟังอยู่บนซ็อกเก็ตนี้สามารถรับข้อมูลนั้นทำบางอย่างโดยใช้การโทรระยะไกลและรับข้อมูลเพิ่มเติมและนำกลับไปที่ซ็อกเก็ตที่จาวาสคริปต์ของฉันต้องการ อ่านและพิมพ์ในเบราว์เซอร์ ฉันได้ลองแล้ว socket.io, websockify แต่ไม่มีการพิสูจน์ว่ามีประโยชน์ ดังนั้นคำถามคือสิ่งที่ฉันพยายามจะเป็นไปได้หรือไม่? มีวิธีใดบ้างที่จาวาสคริปต์ที่ทำงานในเบราว์เซอร์สามารถเชื่อมต่อกับซ็อกเก็ต tcp และส่งข้อมูลบางส่วนและฟังมันเพื่อตอบสนองข้อมูลเพิ่มเติมบนซ็อกเก็ตและพิมพ์ไปยังเบราว์เซอร์ หากสิ่งนี้เป็นไปได้จะช่วยชี้ทิศทางที่ถูกต้องให้ฉันได้บ้างว่าจะช่วยให้ฉันตั้งเป้าหมายได้อย่างไร


5
Linux: มีการอ่านหรือรับข้อมูลจากซ็อกเก็ตที่หมดเวลาหรือไม่?
ฉันจะพยายามอ่านข้อมูลจากซ็อกเก็ตแบบหมดเวลาได้อย่างไร ฉันรู้ว่าเลือกเลือกแบบสำรวจมีฟิลด์หมดเวลา แต่การใช้พวกเขาปิดใช้งาน "tcp fast-path" ใน tcp reno stack ความคิดเดียวที่ฉันมีคือใช้ recv (fd, ... , MSG_DONTWAIT) ในวง
106 c  linux  sockets  tcp 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.