<script type="text/javascript" language=JavaScript charset="UTF-8">
documentonkeydown=function(event){
var e = event || windowevent || argumentscalleecallerarguments[0];
if(e && ekeyCode==13){ // enter 键
//发送信息代码
}
};
</script>
enter键的keyCode是13,通过onkeydown可以判断按下enter然后做发送消息。
参考资料:
这样的写法有点问题:1)服务器端既然采用了异步方式Accept,就没有必要再启线程2)估计allDone是一个ManualResetEvent。用ManualResetEvent的目的什么呢?服务器端采用异步Accept的代码其实很简单,也不需要ManualResetEvent同步 public class AppTCPServer { public AppTCPServer(string localIP, int port) { Socket socket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp); EndPoint localEP = new IPEndPoint(IPAddressParse(localIP), port); socketBind(localEP); socketListen(100); socketBeginAccept(AcceptAsync, socket); } private void AcceptAsync(IAsyncResult ar) { Socket socket = arAsyncState as Socket; try { Socket client = socketEndAccept(ar); ConsoleWriteLine("客户端连接成功!客户端:{0}", clientRemoteEndPointToString()); if (OnConnected != null) { OnConnected(this, new ClientConnectedEventArgs(client)); } } catch (Exception e) { ConsoleWriteLine("AcceptAsync发生异常,异常信息:\n{0}", eMessage); } finally { //继续异步Accept socketBeginAccept(AcceptAsync, socket); } } //客户端连接后的事件 OnConnect public event EventHandler OnConnected; } /// /// 事件参数:接收客户端连接后的事件参数 /// public class ClientConnectedEventArgs : EventArgs { public ClientConnectedEventArgs(Socket clientSocket) { ClientSocket = clientSocket; } public Socket ClientSocket { get; private set; } } class Program { static void Main(string[] args) { AppTCPServer server = new AppTCPServer("1270001", 8000); serverOnConnected += server_OnConnected; ConsoleWriteLine("按任意键结束程序……"); ConsoleReadKey(); } static void server_OnConnected(object sender, ClientConnectedEventArgs e) { Socket client = eClientSocket; string hello = "Hello from AppTCPServer"; clientSend(EncodingDefaultGetBytes(hello)); } } 客户端测试程序 class Program { static void Main(string[] args) { //模拟100个客户连接服务器 for (int i = 0; i < 100; i++) { Socket socket = ConnectToServer("127001", 8000); byte[] buffer = new byte[1024]; int bytesRecevied = socketReceive(buffer, bufferLength, SocketFlagsNone); byte[] messageBytes = new byte[bytesRecevied]; ArrayCopy(buffer, messageBytes, bytesRecevied); ConsoleWriteLine(EncodingDefaultGetString(messageBytes)); socketDisconnect(false); socketClose(); } ConsoleReadKey(); static Socket ConnectToServer(string serverIP, int serverPort) { Socket socket = new Socket(AddressFamilyInterNetwork, SocketTypeStream, ProtocolTypeTcp); EndPoint localEP = new IPEndPoint(IPAddressAny, 0); socketBind(localEP); socketConnect(new IPEndPoint(IPAddressParse(serverIP), serverPort)); return socket; } }
1用户ID是静态变量不管创建多少个新连接都用一个变量。故ID都不同。
2ClientHandler ch = new ClientHandler(serverSocketaccept());判断如果由客户请求连接,就接受进来给ch。
3如果三个客户都建立连接,则会有四个线程,三个客户和一个主线程。
4当执行了一次start(),就启动一个线程,当断开连接线程中止。未断开前三个客户线程和主线程建立通道进行通信。
1 你可以通过安装相关软件来构建自己的奥特聊天室,比如Mumble,Skype等。
2 搜索网络上的论坛,这里有很多支持类似的聊天室的技术支持,搜索相关的开发文档和教程,学习如何使用相关的软件构建自己的聊天室。
3 如果你想要更加复杂的聊天室,也可以使用XMPP聊天协议,使用Nodejs来搭建自己的聊天服务器,构建自己的聊天室。
聊天室程序原原理没简单,利用网络进行数据交互,但单单用C写聊天室,工作量还是很大的
主要是两个部分,界面和网络
界面不是标准C的强项,直接用纯C在windwos下写界面是一件很复杂的事,且事实上,现在基本没有人这么做了,一般会用C++加上第三方的库或控件,如QT,MFC,VCL等,当然QT是首选,但要有相当的C++的编程基础(而非C的)
而C的网络编程也是有技术难度,直接调用低层的socket,也基本没有人做了
我经常到csdn有许多的
这里有一些楼主参考一下吧
>
以上就是关于请问在java中,编写一个聊天室程序,怎样实现“按enter键将消息发送出去”这个功能呢全部的内容,包括:请问在java中,编写一个聊天室程序,怎样实现“按enter键将消息发送出去”这个功能呢、你好,请问网络编程聊天室程序运行后出错,服务器端显示 accept:invalid argument.这个问题你解决了吗、有关聊天室程序的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)