最简单的那种?我给你写一个=,=
//服务器
#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 封包拆包源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)