Chủ đề: em có thắc mắc về socket
-
24-12-2012, 04:09 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
em có thắc mắc về socket
public class server{
public server(){
try{
ServerSocket ss = new ServerSocket(9999);
Socket s;
while(true){
s = ss.accept();
new Thread(new process(s)).start();
s.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
=================================
public class process implements Runnable{
Socket a;
public process(Socket s){
a = s;
}
public void run(){
// do something
}
}
// đoạn code trên là về một server sử dụng đa tuyến phục vụ nhiều client cùng lúc
// vấn đề ở đây là khi s (của lớp server đóng lại) (s.close()) thì a (của lớp process) (a được gán = s) //cũng đóng theo, mặc dù lớp process chưa chạy xong
// mọi người có cách j giải quyết ko ợ?View more random threads:
- Không Import được Project vào JBuilder 2008
- [Hỏi] Lỗi type-argument K#1 not within bounds ò type-variable K#2
- cho em hoi bai ve string
- Lỗi vòng lặp trong java
- bài tập Java căn bản
- lỗi java.lang.NullPointerException trong java
- Tìm sư phụ dạy lập trình
- JSF controller class
- Help ... help....Làm Giúp mình bài Tập này với......
- Lỗi hiển thị chữ trên giao diện khi chạy multithread...
-
24-12-2012, 05:45 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Tại sao lại close khi chưa giải quyết xong vậy [IMG]images/smilies/icon_question.gif[/IMG]
-
25-12-2012, 08:06 AM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi fly_boy_9x
-
25-12-2012, 03:58 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Wazi Armstrong
a đã có giá trị; b gán = a;
khi a đóng, thì b cũng tự động đóng theo (cái này do JVM làm) em ko can thiệp j hết ợ
-
25-12-2012, 04:20 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi fly_boy_9x
-
25-12-2012, 04:33 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Wazi Armstrong
-
25-12-2012, 04:46 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Em hiểu sai hoàn toàn kiến thức về Thread rồi. Thread start sẽ chạy một luồng mới, trong khi đó luồng chính (main Thread) vẫn tiếp tục. Vì thế nên process của em chưa kịp xử lí gì thì close mất rồi.
Thêm nữa là sau trước khi dừng server nên close serversocket lại
-
25-12-2012, 06:08 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Wazi Armstrong
-
11-01-2013, 04:05 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mình nghĩ bạn nên đóng close() trong method run() để đảm bảo thực hiện xong công việc thì mới đóng socket ( cái mà ta đang dùng đảm nhiệm trao đổi thông tin trong luồng hiện tại). Để đa luồng thì bạn cần mở socket mới nếu có luồng mới cần thực hiện và tất nhiên lại chỉ đóng nó khi hoàn thành xong.
while(true){
Socket s =new Socket( ss.accept());
new Thread(new process(s)).start();
s.close();
}
và cuối hàm run() bạn đóng cái socket mà run() đang dùng lại.
Mình nghĩ là kiểu j bạn cũng cần mở các socket mới nếu như 1 tiến trình mới xuất hiện và chỉ close nó sau khi nó thực hiện xong.
Dưới ánh nắng mặt trời đang lên, những đống pallet nhựa An Giang trải dài mênh mông như những bức tranh tự nhiên đầy sắc màu. Mỗi chiếc pallet nhựa không chỉ là một vật dụng thông thường mà còn là...
Pallet nhựa An Giang giao hàng...