求一C语言写的tcp程序的源码,程序越简单越好,C++也可以,最好带注释

求一C语言写的tcp程序的源码,程序越简单越好,C++也可以,最好带注释,第1张

最简单的那种?我给你写一个=,=

//服务器

#include <sys/stath>

#include <fcntlh>

#include <errnoh>

#include <netdbh>

#include <sys/typesh>

#include <sys/socketh>

#include <netinet/inh>

#include <arpa/ineth>

#include <stringh>

#include <stdlibh>

#include <stdioh>

#include <unistdh>

main()

{

//创建套接字

int serverSocket= socket(AF_INET,SOCK_STREAM,0);

struct sockaddr_in server_addr;

struct sockaddr_in clientAddr;

int addr_len = sizeof(clientAddr);

int client;

char buffer[200];

//创建地址

bzero(&server_addr,sizeof(server_addr));

server_addrsin_family =AF_INET;

server_addrsin_port = htons(5555);

server_addrsin_addrs_addr = htonl(INADDR_ANY);

//绑定

bind(serverSocket,(struct sockaddr )&server_addr,sizeof(server_addr));

//帧听

listen(serverSocket,5);

printf("客户端发过来的 :\n");

//接收

client=accept(serverSocket,(sockaddr )&clientAddr,(socklen_t)&addr_len);

printf("客户端发过来的 :\n");

while(1)

{

if(recv(client,buffer,sizeof(buffer),0)>0)

printf("客户端发过来的 : %s\n",buffer);

}

return 0;

}

//客户端

#include <sys/stath>

#include <fcntlh>

#include <errnoh>

#include <netdbh>

#include <sys/typesh>

#include <sys/socketh>

#include <netinet/inh>

#include <arpa/ineth>

#include <stringh>

#include <stdlibh>

#include <stdioh>

#include <unistdh>

main()

{

struct sockaddr_in serverAddr;

int clientSocket=socket(AF_INET,SOCK_STREAM,0);

char sendbuf[200];

//创建地址信息

serverAddrsin_family=AF_INET;

serverAddrsin_port=htons(5555);

serverAddrsin_addrs_addr=inet_addr("127001");

//连接服务器

connect(clientSocket,(sockaddr)&serverAddr,sizeof(serverAddr));

printf("连接目标主机中\n连接完成\n");

//

while(1)

{

printf("请输入发给服务器的数据 : ");

scanf("%s",sendbuf);

//strcmp函数作用,比较两个东东(按ASCII值大小相比较),相同就==0。

if(strcmp(sendbuf,"x")==0)

break;

send(clientSocket,sendbuf,sizeof(sendbuf),0);

}

close(clientSocket);

return 0;

}

这种东西做过,不过源代码是不可能了:P。双方通过Socket通信,需要了解每种语言 *** 作Socket的方式。Java只写ServerSocket的代码,负责接受数据;而C++同样只是向Java所在服务器的指定Socket发数据就可以了这里有一个需要注意的,数据格式的问题

这个给你一个建议,不要使用Java和C++的方法来读写数据,而把数据都看做二进制流,自己来定义数据的含义,自己来负责转换

看这个题目就知道你对“协议”的概念还不了解。

所谓的封包和拆包,值得是在指定协议下,将若干个不同数据类型的值整合到一个报文帧里面。

拆包是封包的反向过程,将报文帧还原为原始数据。

不论是封包也好拆包也好,都必然是在指定协议下进行的。

脱离协议约定,这两个动作是没有意义的,无法独立存在。

服务器端: package chat_01; import javaawtBorderLayout; import javaioDataInputStream; import javaioDataOutputStream; import javaioIOException; import javanetServerSocket; import javanetSocket; import javatextSimpleDateFormat; import javautilDate; import javaxswingJFrame; import javaxswingJTextArea; public class ChatServer extends JFrame { private static final long serialVersionUID = 1L; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private JTextArea jta; private DataInputStream dis; private DataOutputStream dos; private ServerSocket serverSocket; private String dateString; public static void main(String[] args) { ChatServer server = new ChatServer(); servershowServer(); serversend(); } public void showServer() { jta = new JTextArea(); thissetLayout(new BorderLayout()); thisadd(jta, BorderLayoutCENTER); thissetLocation(300, 100); thissetSize(500, 400); thissetTitle("服务器端"); thissetVisible(true); thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE); } public void send() { try { serverSocket = new ServerSocket(8007); while (true) { Socket socket = serverSocketaccept(); Systemoutprintln("一个用户连接上了。。。"); dis = new DataInputStream(socketgetInputStream()); dos = new DataOutputStream(socketgetOutputStream()); new Thread(new ClientThread())start(); } } catch (IOException e) { eprintStackTrace(); } } private class ClientThread implements Runnable { public void run() { while (true) { try { Date currentTime = new Date(); dateString = formatformat(currentTime); String str = disreadUTF(); doswriteUTF(str); jtaappend(dateString + "

" + str + "

"); }catch (IOException e) { eprintStackTrace(); } } } } } 客户端: package chat_01; import javaawt; import javaawtevent; import javaio; import javanetSocket; import javanetUnknownHostException; import javatextSimpleDateFormat; import javautilDate; import javaxswing; public class ChatClient extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextArea jta; private JTextField jtf; private JButton jbt; DataOutputStream dos; DataInputStream dis; public static void main(String[] args) { ChatClient client = new ChatClient(); clientconnected(); clientshowClient(); } public void showClient() { jta = new JTextArea(); jtasetEditable(false); jtf = new JTextField(); jbt = new JButton("发送"); JPanel panel = new JPanel(); panelsetLayout(new BorderLayout()); paneladd(jtf, BorderLayoutCENTER); paneladd(jbt, BorderLayoutEAST); thissetLayout(new BorderLayout()); thisadd(jta, BorderLayoutCENTER); thisadd(panel, BorderLayoutSOUTH); jtfaddActionListener(this); jbtaddActionListener(this); thissetLocation(300, 100); thissetSize(500, 400); thissetTitle("客户端"); thissetVisible(true); thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date currentTime = new Date(); String dateString = formatformat(currentTime); String text = jtfgetText(); jtaappend(dateString + "

"); jtaappend(text + "

"); jtfsetText(""); jtfgrabFocus();// 文本框获取光标(焦点) try { doswriteUTF(text); dosflush(); jtaappend(disreadUTF()); Systemoutprintln(text + "client"); } catch (IOException e1) { e1printStackTrace(); } } public void connected() { try { Socket socket = new Socket("127001", 8007); dos = new DataOutputStream(socketgetOutputStream()); dis = new DataInputStream(socketgetInputStream()); } catch (UnknownHostException e) { eprintStackTrace(); } catch (IOException e) { eprintStackTrace(); } } }

以上就是关于求一C语言写的tcp程序的源码,程序越简单越好,C++也可以,最好带注释全部的内容,包括:求一C语言写的tcp程序的源码,程序越简单越好,C++也可以,最好带注释、java 做服务端 C++做客户端 2者用socket通信传文件,知道的说下,最好有源码。、求C# socket 封包拆包源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10105595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存