Em đang là sinh viên trường ĐHBK va em đang học lập trình bằng Visual Basic. Em định làm một chương trình truyền dữ liệu giữa 2 máy với nhau thông qua cổng COM. Nhưng em chưa biết có cách nào để làm được điều đó. Ý định của em là làm một chương trình gần giống kiểu chát trực tiếp khi máy này đánh một đoạn văn bản thì máy kia cũng nhận được va ngược lại nhưng em đã tham khảo nhiều sách mà chẳng thấy có sách nào nói về 1 hàm nào trong ngôn ngữ này làm được điều đó. Em mong nhận được sự giúp đỡ của quý báo, nếu có thể gửi cho em một đoạn code như vậy hoặc xin ban biên tập có thể gợi ý cho em một loại sách nào về vấn đề đó thì em xin cám ơn rất nhiều. Em xin cám ơn nhiều.
Vu Van Hung
Hồi âm:
Noi truc tiep 2 may tinh qua cong Com can toi thieu cable 3 soi, truyen du lieu kha on dinh nhung vi cach truyen qua don gian cho nen kho co the truyen tot. Dieu do tuy thuoc vao giao thuc ma ban su dung (khi toi viet chuong trinh nay toi dung Kermit vi chang con
cach nao hon), neu ban viet chuong trinh "chat" thi khong co gi phuc
tap (phuc tap la o truyen file co*).
Ban tham khao sach :
-Co so ki thuat truyen so lieu (tac gia: khong nho, khoa CNTT truong ban)
-Ki thuat lap trinh ghep noi may tinh (NXB: KHKT, tac
gia: khong nho, moi phat hanh nam 2000 hay la 2001 gi do)
Neu ban muon co chuong trinh cu the, hay lien he voi toi:
namheo@yahoo.com. Chuc thanh cong.
Nam Nguyen
Em men! Anh viet khoang hon 70% cong viec roi khong the viet het duoc vi thoi gian khong co nhieu nhu mong muon vay qua lap trinh em co the nghien cuu them o day, va chi can viet them mot chut nua thoi la hinh thanh mot khung cua de moi cac ban em vao chat choi. Buiding an Internet Chat System import java.net.*;import java.io.*;
import java.awt.*;
protected DataInputStream i;
protected DataOutputStream o;
protected TextArea output;
protected TextField input;
protected Thread listener;
public ChatClient (String title, InputStream i, OutputStream o) {
super (title);
this.i = new DataInputStream (new BufferedInputStream (i));
this.o = new DataOutputStream (new BufferedOutputStream (o));
setLayout (new BorderLayout ());
add ("Center", output = new TextArea ());
output.setEditable (false);
add ("South", input = new TextField ());
pack ();
show ();
input.requestFocus ();
listener = new Thread (this);
listener.start ();
}
public void run () {
try {
while (true) {
String line = i.readUTF ();
output.appendText (line + "\n");
}
} catch (IOException ex) {
ex.printStackTrace ();
} finally {
listener = null;
input.hide ();
validate ();
try {
o.close ();
} catch (IOException ex) {
ex.printStackTrace ();
}
}
}
public boolean handleEvent (Event e) {
if ((e.target == input) && (e.id == Event.ACTION_EVENT)) {
try {
o.writeUTF ((String) e.arg);
o.flush ();
} catch (IOException ex) {
ex.printStackTrace();
listener.stop ();
}
input.setText ("");
return true;
} else if ((e.target == this) && (e.id == Event.WINDOW_DESTROY)) {
if (listener != null)
listener.stop ();
hide ();
return true;
}
return super.handleEvent (e);
}
public static void main (String args[]) throws IOException {
if (args.length != 2)
throw new RuntimeException ("Syntax: ChatClient ");
Socket s = new Socket (args[0], Integer.parseInt (args[1]));
new ChatClient ("Chat " + args[0] + ":" + args[1],
s.getInputStream (), s.getOutputStream ());
}
Class ChatServer
This class is concerned with accepting connections from clients and launching handler threads to process them.
import java.net.*;
import java.io.*;
import java.util.*;
public class ChatServer {
// public ChatServer (int port) throws IOException ...
// public static void main (String args[]) throws IOException ...
}
public ChatServer (int port) throws IOException {
ServerSocket server = new ServerSocket (port);
while (true) {
Socket client = server.accept ();
System.out.println ("Accepted from " + client.getInetAddress ());
ChatHandler c = new ChatHandler (client);
c.start ();
}
}
public static void main (String args[]) throws IOException {
if (args.length != 1)
throw new RuntimeException ("Syntax: ChatServer ");
new ChatServer (Integer.parseInt (args[0]));
}
The main() method creates an instance of the ChatServer, passing the command-line port as a parameter. This is the port to which clients will connect.
import java.net.*;
import java.io.*;
import java.util.*;
protected Socket s;
protected DataInputStream i;
protected DataOutputStream o;
public ChatHandler (Socket s) throws IOException {
this.s = s;
i = new DataInputStream (new BufferedInputStream (s.getInputStream ()));
o = new DataOutputStream (new BufferedOutputStream (s.getOutputStream ()));
}
protected static Vector handlers = new Vector ();
public void run () {
try {
handlers.addElement (this);
while (true) {
String msg = i.readUTF ();
broadcast (msg);
}
} catch (IOException ex) {
ex.printStackTrace ();
} finally {
handlers.removeElement (this);
try {
s.close ();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
protected static void broadcast (String message) {
synchronized (handlers) {
Enumeration e = handlers.elements ();
while (e.hasMoreElements ()) {
ChatHandler c = (ChatHandler) e.nextElement ();
try {
synchronized (c.o) {
c.o.writeUTF (message);
}
c.o.flush ();
} catch (IOException ex) {
c.stop ();
}
}
}
}
Phucusa
Em thu tham khao o day xem:
http://www.vbip.com/
Chuc thanh cong.
Vnerdr
Cách dễ nhất là dùng DirectPlay (là 1 thành phần trong DirectX).
DirectPlay sẽ xử lí việc truyền data, công việc còn lại của bạn chỉ là xử lí data. DirectPlay rất tiên lợi ở chỗ nó xử lí việc truyền data qua COM, LAN, MODEM, ... nên với cùng 1 code bạn có thể truyền data qua cả COM, LAN lẫn MODEM... Sample và hướng dẫn có trong bộ MSDN.
Theo mình nghĩ thì Visual Basic dùng cho 2 đối tượng: người mới làm quen với lập trình trong Windows (dùng để viết các ứng dụng rất đơn giản) và người lập trình lâu năm kinh nghiệm (biết cách tận dụng khả năng của Visual Basic).
Do đó nếu bạn thuộc đối tượng thứ nhất (bạn học BK, chuyên ngành computer?) thì sau khi đã "quen" lập trình trong Windows bằng Visual Basic, bạn nên học cho vững lập trình C/C++ trong Windows (dùng Win32, Visual C++, Borland C++ Builder, ...). Sau khi đã vững rồi thì mình khuyên bạn nên dùng Borland C++ Builder vì nó giúp bạn viết chương trình nhanh không kém gì Visual Basic hoặc Delphi.
Chúc bạn thành công. Nếu cần thì liên lạc với mình ngocdaothanh@yahoo.com
Đào Thanh Ngọc
Co nhieu cach de viet chuong trinh truyen du lieu giu hai may, qua nhung OSI layers khac nhau layer1 (physical), layer2 (data link), layer3 (network -IP), layer4 (Transport - TCP, UDP va COM?) ... va application layer. Hien nay, nguoi ta huong dung "Message Bus" o application layer de chuyen du lieu cho nhau... (Hung se biet tai sao sau khi vao trang ben duoi)
http://www.tibco.com/solutions/products/
active_enterprise/rv/default.jsp download Rendezous, nap vao may, vao xem va cho chay nhung bai mau danh rieng cho Visual Basic (Com)... Men!
Trung Ho