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

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

11
วิธีกำหนดค่าการหมดเวลาการเชื่อมต่อซ็อกเก็ต
เมื่อลูกค้าพยายามเชื่อมต่อกับที่อยู่ IP ที่ถูกตัดการเชื่อมต่อจะมีการหมดเวลานานกว่า 15 วินาที ... เราจะลดระยะหมดเวลานี้ได้อย่างไร? วิธีการกำหนดค่าคืออะไร? รหัสที่ฉันใช้เพื่อตั้งค่าการเชื่อมต่อซ็อกเก็ตมีดังต่อไปนี้: try { m_clientSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(serverIp); int iPortNo = System.Convert.ToInt16(serverPort); IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo); m_clientSocket.Connect(ipEnd); if (m_clientSocket.Connected) { lb_connectStatus.Text = "Connection Established"; WaitForServerData(); } } catch (SocketException se) { lb_connectStatus.Text = "Connection …
105 c#  sockets  timeout 

2
ซ็อกเก็ต TCP และ UDP สามารถใช้พอร์ตเดียวกันได้หรือไม่
ก่อนอื่นมีปัญหากับการใช้ทั้ง UDP และ TCP บนเซิร์ฟเวอร์เดียวกันหรือไม่? ประการที่สองฉันสามารถใช้หมายเลขพอร์ตเดียวกันได้หรือไม่?
104 sockets  networking  tcp  udp 

6
Chrome แฮงค์หลังจากมีการถ่ายโอนข้อมูลจำนวนหนึ่ง - กำลังรอซ็อกเก็ตที่พร้อมใช้งาน
ฉันมีเกมบนเบราว์เซอร์และฉันเพิ่งเริ่มเพิ่มเสียงในเกม Chrome ไม่โหลดทั้งหน้าและติดขัด"91 requests | 8.1 MB transferred"และไม่โหลดเนื้อหาเพิ่มเติม และมันยังทำลายเว็บไซต์ในแท็บอื่น ๆ ทั้งหมดอีกWaiting for available socketด้วย หลังจาก 5 นาที (แน่นอน) ข้อมูลจะถูกโหลด สิ่งนี้ไม่เกิดขึ้นบนเบราว์เซอร์อื่น ๆ การลบไฟล์ MP3 หนึ่งไฟล์ (ไฟล์ที่เพิ่มล่าสุด) ช่วยแก้ปัญหาได้ดังนั้นอาจเป็นปัญหาการ จำกัด ข้อมูลหรือไม่?

15
ฉันจำเป็นต้อง heartbeat เพื่อให้การเชื่อมต่อ TCP เปิดอยู่หรือไม่
ฉันมีส่วนประกอบสองอย่างที่สื่อสารผ่าน TCP / IP ส่วนประกอบ A ทำหน้าที่เป็นเซิร์ฟเวอร์ / ผู้ฟังและส่วนประกอบ B คือไคลเอนต์ ทั้งสองควรสื่อสารกันโดยเร็วที่สุด สามารถมีการเชื่อมต่อเพียงครั้งเดียวได้ตลอดเวลา (แม้ว่าจะอยู่นอกเหนือคำถามนี้ก็ตาม) นักพัฒนาอาวุโสใน บริษัท ของฉันกล่าวว่าฉันจำเป็นต้องใช้การเต้นของหัวใจระดับแอปพลิเคชันระหว่างองค์ประกอบทั้งสองเพื่อให้แน่ใจว่าการเชื่อมต่อยังคงเปิดอยู่ ฉันคิดว่าการเชื่อมต่อยังคงเปิดอยู่ด้วย TCP / IP แต่ฉันได้อ่านบล็อก / ไซต์หลายแห่งบอกว่าการปฏิบัติตามมาตรฐานการเต้นของหัวใจระหว่างแอปพลิเคชันเหล่านี้ค่อนข้างเป็นมาตรฐาน ฉันรู้ว่าส่วนหนึ่งขององค์ประกอบเหตุผลส่วนประกอบของการเต้นของหัวใจ B จึงสามารถแจ้งฝ่ายสนับสนุนได้หากมีปัญหาในการสื่อสารกับส่วนประกอบ B (ลิงก์ไม่ทำงานหรือส่วนประกอบ B ไม่ทำงาน) การเต้นของหัวใจจำเป็นด้วยเหตุผลอื่นหรือไม่? เช่นเพื่อให้แน่ใจว่ามีบางสิ่งบางอย่าง "อยู่ในท่อ" เพื่อให้มันเปิดอยู่บ่อยๆ? ส่วนประกอบ A ขณะนี้ heartbeats ส่วนประกอบ B ทุกๆ 20 วินาทีและปิดการเชื่อมต่อหากไม่มีสิ่งใดได้รับกลับมาจากส่วนประกอบ B ใน 120 วินาที จากนั้นจะกลับมาฟังการเชื่อมต่ออีกครั้งภายใต้สมมติฐานว่าส่วนประกอบ B …
98 sockets  tcp 

7
เมื่อใดจึงจำเป็นต้องใช้อ็อพชัน TCP SO_LINGER (0)
ฉันคิดว่าฉันเข้าใจความหมายที่เป็นทางการของตัวเลือก ในรหัสเดิมที่ฉันจัดการอยู่ตอนนี้ตัวเลือกนี้ถูกใช้ ลูกค้าบ่นเกี่ยวกับ RST เป็นการตอบสนองต่อ FIN จากด้านข้างเมื่อปิดการเชื่อมต่อจากด้านข้าง ฉันไม่แน่ใจว่าจะสามารถถอดออกได้อย่างปลอดภัยเนื่องจากฉันไม่เข้าใจว่าควรใช้เมื่อใด คุณช่วยยกตัวอย่างได้ไหมว่าจะต้องมีตัวเลือกเมื่อใด

9
Python [Errno 98] แอดเดรสถูกใช้งานแล้ว
ในโปรแกรม Python socket ของฉันบางครั้งฉันต้องขัดจังหวะด้วยCtrl-C. เมื่อฉันทำสิ่งนี้จะปิดการเชื่อมต่อโดยใช้socket.close(). อย่างไรก็ตามเมื่อฉันพยายามเปิดขึ้นมาใหม่ฉันต้องรอสักครู่ก่อนที่จะเชื่อมต่อได้อีกครั้ง วิธีการปิดซ็อกเก็ตอย่างถูกต้อง? หรือนี่ตั้งใจ?

8
Java socket API: จะทราบได้อย่างไรว่าการเชื่อมต่อถูกปิดแล้ว?
ฉันพบปัญหาบางอย่างกับ Java socket API ฉันกำลังพยายามแสดงจำนวนผู้เล่นที่เชื่อมต่อกับเกมของฉันอยู่ ง่ายต่อการตรวจสอบว่าผู้เล่นเชื่อมต่อเมื่อใด อย่างไรก็ตามดูเหมือนว่าจะยากโดยไม่จำเป็นที่จะระบุว่าเมื่อใดที่ผู้เล่นตัดการเชื่อมต่อโดยใช้ socket API การเรียกisConnected()ซ็อกเก็ตที่ถูกตัดการเชื่อมต่อจากระยะไกลดูเหมือนจะกลับมาtrueเสมอ ในทำนองเดียวกันเรียกบนซ็อกเก็ตที่ได้รับการปิดระยะไกลเสมอดูเหมือนว่าจะกลับมาisClosed() falseฉันได้อ่านแล้วเพื่อตรวจสอบว่าซ็อกเก็ตถูกปิดจริงหรือไม่ข้อมูลจะต้องถูกเขียนไปยังสตรีมเอาต์พุตและต้องมีข้อยกเว้น นี่ดูเหมือนเป็นวิธีที่ไม่สะอาดจริงๆในการจัดการกับสถานการณ์นี้ เราจะต้องส่งสแปมข้อความขยะผ่านเครือข่ายอย่างต่อเนื่องเพื่อที่จะได้รู้ว่าเมื่อซ็อกเก็ตปิดไปแล้ว มีทางออกอื่นอีกไหม?

13
คุณใช้อะไรเมื่อคุณต้องการ UDP ที่เชื่อถือได้?
หากคุณมีสถานการณ์ที่การเชื่อมต่อ TCP อาจช้าเกินไปและ 'การเชื่อมต่อ' UDP อาจไม่น่าเชื่อถือเกินไปคุณใช้อะไร? มีโปรโตคอล UDP มาตรฐานที่เชื่อถือได้หลายแบบคุณมีประสบการณ์อะไรบ้าง? โปรดหารือเกี่ยวกับหนึ่งโปรโตคอลต่อการตอบกลับและหากมีคนอื่นได้กล่าวถึงโปรโตคอลที่คุณใช้แล้วให้พิจารณาโหวตและใช้ความคิดเห็นเพื่ออธิบายอย่างละเอียดหากจำเป็น ฉันสนใจตัวเลือกต่างๆที่นี่ซึ่ง TCP อยู่ที่ปลายด้านหนึ่งของมาตราส่วนและ UDP อยู่ที่อีกด้านหนึ่ง มีตัวเลือก UDP ที่เชื่อถือได้หลากหลายและแต่ละองค์ประกอบของ TCP ไปยัง UDP ฉันรู้ว่าบ่อยครั้ง TCP เป็นตัวเลือกที่ถูกต้อง แต่การมีรายการทางเลือกมักจะมีประโยชน์ในการช่วยให้ได้ข้อสรุปดังกล่าว สิ่งต่างๆเช่น Enet, RUDP และอื่น ๆ ที่สร้างขึ้นบน UDP มีข้อดีข้อเสียหลายประการคุณเคยใช้มันมาแล้วมีประสบการณ์อย่างไรบ้าง? เพื่อหลีกเลี่ยงข้อสงสัยไม่มีข้อมูลเพิ่มเติมนี่เป็นคำถามสมมุติฐานและเป็นคำถามที่ฉันหวังว่าจะได้รับรายการคำตอบที่มีรายละเอียดเกี่ยวกับตัวเลือกและทางเลือกต่างๆที่มีให้สำหรับผู้ที่ต้องการตัดสินใจ

12
เหตุใดจึงเป็นไปไม่ได้โดยไม่ต้องพยายาม I / O เพื่อตรวจพบว่าซ็อกเก็ต TCP ถูกปิดอย่างสง่างามโดยเพียร์
จากคำถามล่าสุดฉันสงสัยว่าเหตุใดจึงเป็นไปไม่ได้ใน Java โดยไม่ต้องพยายามอ่าน / เขียนบนซ็อกเก็ต TCP เพื่อตรวจสอบว่าเพียร์ปิดซ็อกเก็ตอย่างสง่างาม? ดูเหมือนว่าจะเป็นเช่นนี้ไม่ว่าจะใช้พรี NIO Socketหรือ NIO SocketChannelก็ตาม เมื่อเพียร์ปิดการเชื่อมต่อ TCP อย่างสง่างาม TCP สแต็กทั้งสองด้านของการเชื่อมต่อจะรู้เกี่ยวกับข้อเท็จจริง ฝั่งเซิร์ฟเวอร์ (หนึ่งที่บำเพ็ญปิดระบบ) สิ้นสุดลงในรัฐFIN_WAIT2ในขณะที่ฝั่งไคลเอ็นต์ (หนึ่งที่ไม่ชัดเจนตอบสนองต่อการปิดเครื่อง) CLOSE_WAITจะสิ้นสุดลงในรัฐ เหตุใดจึงไม่มีเมธอดในSocketหรือSocketChannelที่สามารถสอบถามสแต็ก TCP เพื่อดูว่าการเชื่อมต่อ TCP พื้นฐานถูกยุติหรือไม่ สแต็ก TCP ไม่ให้ข้อมูลสถานะดังกล่าวหรือไม่? หรือเป็นการตัดสินใจออกแบบเพื่อหลีกเลี่ยงการโทรเข้าเคอร์เนลที่มีราคาแพง? ด้วยความช่วยเหลือของผู้ใช้ที่ได้โพสต์คำตอบสำหรับคำถามนี้แล้วฉันคิดว่าฉันเห็นว่าปัญหาอาจมาจากไหน ด้านที่ไม่ได้ปิดการเชื่อมต่ออย่างชัดเจนจะสิ้นสุดลงในสถานะ TCP CLOSE_WAITหมายความว่าการเชื่อมต่ออยู่ระหว่างการปิดระบบและรอให้ฝั่งนั้นออกการCLOSEดำเนินการของตัวเอง ฉันคิดว่ามันยุติธรรมพอที่isConnectedจะส่งคืนtrueและisClosedคืนสินค้าfalseแต่ทำไมถึงไม่มีบางอย่างเช่นisClosing? ด้านล่างนี้คือคลาสทดสอบที่ใช้ซ็อกเก็ต pre-NIO แต่จะได้ผลลัพธ์ที่เหมือนกันโดยใช้ NIO import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static …

3
UNIX nonblocking I / O: O_NONBLOCK เทียบกับ FIONBIO
ในทุกตัวอย่างและการสนทนาที่ฉันใช้ในบริบทของการเขียนโปรแกรมซ็อกเก็ต BSD ดูเหมือนว่าวิธีที่แนะนำในการตั้งค่าตัวอธิบายไฟล์เป็นโหมด I / O ที่ไม่ปิดกั้นคือการใช้O_NONBLOCKแฟล็กเพื่อfcntl()เช่น int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); ฉันทำการเขียนโปรแกรมเครือข่ายใน UNIX มานานกว่าสิบปีแล้วและใช้การFIONBIO ioctl()โทรเพื่อทำสิ่งนี้มาโดยตลอด: int opt = 1; ioctl(fd, FIONBIO, &opt); ไม่เคยคิดมากว่าทำไม เพิ่งเรียนรู้วิธีนี้ ใครมีความเห็นเกี่ยวกับข้อดีของข้อใดข้อหนึ่งหรือไม่? ฉันคิดว่าโลคัสการพกพานั้นแตกต่างกันบ้าง แต่ไม่รู้ว่าioctl_list(2)มันไม่ได้พูดถึงแง่มุมของแต่ละioctlวิธี

7
ฉันจะลบการเชื่อมต่อซ็อกเก็ต CLOSE_WAIT ได้อย่างไร
ฉันได้เขียนโปรแกรมขนาดเล็กที่โต้ตอบกับเซิร์ฟเวอร์บนพอร์ตเฉพาะ โปรแกรมทำงานได้ดี แต่: เมื่อโปรแกรมสิ้นสุดลงโดยไม่คาดคิดและนับตั้งแต่การเชื่อมต่อซ็อกเก็ตนั้นแสดงอยู่ในCLOSE_WAITสถานะ ถ้าฉันพยายามเรียกใช้โปรแกรมมันแฮงค์และฉันต้องบังคับให้ปิดซึ่งจะสะสมการเชื่อมต่อซ็อกเก็ตมาก ยิ่งขึ้นCLOSE_WAIT มีวิธีล้างการเชื่อมต่อเหล่านี้หรือไม่?
92 linux  sockets 

10
มีวิธีสำหรับหลายกระบวนการในการแชร์ซ็อกเก็ตการฟังหรือไม่?
ในการเขียนโปรแกรมซ็อกเก็ตคุณสร้างซ็อกเก็ตการฟังจากนั้นสำหรับไคลเอนต์แต่ละตัวที่เชื่อมต่อคุณจะได้รับสตรีมซ็อกเก็ตปกติที่คุณสามารถใช้เพื่อจัดการกับคำขอของไคลเอ็นต์ ระบบปฏิบัติการจะจัดการคิวของการเชื่อมต่อขาเข้าเบื้องหลัง สองกระบวนการไม่สามารถเชื่อมโยงกับพอร์ตเดียวกันในเวลาเดียวกัน - โดยค่าเริ่มต้นอย่างไรก็ตาม ฉันสงสัยว่ามีวิธีใด (ในระบบปฏิบัติการที่รู้จักกันดีโดยเฉพาะ Windows) ในการเปิดใช้งานอินสแตนซ์หลาย ๆ ขั้นตอนเพื่อให้พวกเขาเชื่อมโยงกับซ็อกเก็ตทั้งหมดดังนั้นพวกเขาจึงแบ่งปันคิวได้อย่างมีประสิทธิภาพ จากนั้นแต่ละอินสแตนซ์ของกระบวนการสามารถเป็นเธรดเดียว มันจะบล็อกเมื่อยอมรับการเชื่อมต่อใหม่ เมื่อไคลเอ็นต์เชื่อมต่ออินสแตนซ์กระบวนการที่ไม่ได้ใช้งานตัวใดตัวหนึ่งจะยอมรับไคลเอ็นต์นั้น สิ่งนี้จะช่วยให้แต่ละกระบวนการมีการใช้งานแบบเธรดเดียวที่เรียบง่ายมากโดยไม่ต้องแชร์อะไรเลยเว้นแต่ผ่านหน่วยความจำที่แบ่งใช้อย่างชัดเจนและผู้ใช้จะสามารถปรับแบนด์วิดท์การประมวลผลได้โดยเริ่มอินสแตนซ์เพิ่มเติม คุณสมบัติดังกล่าวมีอยู่จริงหรือไม่? แก้ไข:สำหรับผู้ที่ถามว่า "ทำไมไม่ใช้เธรด" เห็นได้ชัดว่าเธรดเป็นตัวเลือก แต่ด้วยหลายเธรดในกระบวนการเดียวอ็อบเจ็กต์ทั้งหมดสามารถแชร์ได้และต้องใช้ความระมัดระวังเป็นอย่างยิ่งเพื่อให้แน่ใจว่าอ็อบเจ็กต์ไม่ได้ถูกแชร์หรือมองเห็นได้ทีละเธรดเท่านั้นหรือไม่เปลี่ยนรูปอย่างแน่นอนและเป็นภาษายอดนิยมและ เวลาทำงานขาดการสนับสนุนในตัวสำหรับการจัดการความซับซ้อนนี้ เมื่อเริ่มต้นกระบวนการของผู้ปฏิบัติงานที่เหมือนกันจำนวนหนึ่งคุณจะได้รับระบบที่ทำงานพร้อมกันซึ่งค่าเริ่มต้นคือไม่มีการแบ่งปันทำให้ง่ายต่อการสร้างการใช้งานที่ถูกต้องและปรับขนาดได้

5
การตั้งค่าการหมดเวลาสำหรับการทำงานของซ็อกเก็ต
เมื่อฉันสร้างซ็อกเก็ต: Socket socket = new Socket(ipAddress, port); มันแสดงข้อยกเว้นซึ่งก็โอเคเนื่องจากไม่มีที่อยู่ IP (ตัวแปรทดสอบที่String ipAddress = "192.168.0.3"และint port = 300.) ปัญหาคือ: ฉันจะตั้งค่าให้หมดเวลาสำหรับซ็อกเก็ตนั้นได้อย่างไร? เมื่อฉันสร้างซ็อกเก็ตฉันจะลดเวลาก่อนที่ฉันจะได้รับUnknownHostExceptionและทำให้ซ็อกเก็ตหมดเวลาได้อย่างไร
87 java  sockets 

5
วิธีการระบุที่อยู่ 'OSError: ไม่พบ libc' ยกมาจาก Gunicorn exec ของแอพ Flask ภายในคอนเทนเนอร์ Docker Alpine
ฉันกำลังทำงานกับแอพพลิเคชั่น Flask โดยใช้แอพ Microblog จากโปรแกรมสอนพิเศษของ Miguel Grinberg รหัสอาศัยอยู่ที่นี่: https://github.com/dnilasor/quickgig ฉันมีการใช้งานนักเทียบท่าที่ใช้งานได้กับคอนเทนเนอร์ MySQL 5.7 ที่เชื่อมโยง วันนี้ฉันได้เพิ่มฟังก์ชั่น Admin View โดยใช้โมดูล Flask-Admin มันใช้งานได้อย่างสวยงามในประเทศ (OSX) บนเซิร์ฟเวอร์ Flask ผ่าน 'flask run' แต่เมื่อฉันสร้างและเรียกใช้อิมเมจ docker ใหม่ (อิงจาก python: 3.8-alpine) มันเกิดข้อผิดพลาดในการบูตพร้อมOSError: libc not foundรหัสข้อผิดพลาด ระบุไลบรารีที่ไม่รู้จัก ฉันคิดว่า Gunicorn ไม่สามารถให้บริการแอพหลังจากที่ฉันเพิ่มเข้ามา เพื่อนร่วมชั้นของฉันและฉันถูกนิ่งงัน! ฉันเริ่มมีข้อผิดพลาดในการใช้ภาพหลาม: 3.6 ภาพอัลไพน์ฐานและลองกับ 3.7 และ 3.8 เพื่อประโยชน์ ฉันยังสังเกตเห็นว่าฉันกำลังเพิ่ม PyMySQL ซ้ำซ้อนครั้งหนึ่งใน …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.